电话短信问题(转)

    技术2025-10-18  7

    转自http://wang-peng1.javaeye.com/blog/553968

    其实无论呼入呼出 都可以使用receive捕获相关信息,当然 android不支持程序不能拨电话的 我们也是间接实现 public void onReceive(Context context, Intent intent){     String action = intent.getAction();         if (Intent.ACTION_NEW_OUTGOING_CALL.equals(action)) {                 String number = getResultData();                         if (number.startsWith(BYPASS_PREFIX)) {                                      setResultData(number.substring(BYPASS_PREFIX.length()));                                }                          else {             // do additional processing        }    } 2.拆解短信 http://www.androidcompetencycenter.com/2008/12/android-api-sms-handling/ public class SMSReceiver extends BroadcastReceiver{     public void onReceive(Context context, Intent intent)    {             Bundle myBundle = intent.getExtras();                    SmsMessage [] messages = null;             String strMessage = "";                     if (myBundle != null)                             {                                         Object [] pdus = (Object[]) myBundle.get("pdus");                                         messages = new SmsMessage[pdus.length];                                         for (int i = 0; i < messages.length; i++)                                                    {                                                                   messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);                                                                   strMessage += "SMS From: " + messages[i].getOriginatingAddress();                                                                   strMessage += " : ";                                                                                  strMessage += messages[i].getMessageBody();                                                                                   strMessage += "/n";                                                                }                Toast.makeText(context, strMessage, Toast.LENGTH_SHORT).show();        }    }} 3.<manifest xmlns:android="http://schemas.android.com/apk/res/android"         package="com.neocodenetworks.smsfwd"         android:versionCode="1"          android:versionName="1.0">            <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">                 <receiver android:name=".SmsReciever">                             <intent-filter>                                            <action android:name="android.provider.telephony.SMS_RECIEVED"></action>                                        </intent-filter>                 </receiver>                        </application>             <uses-sdk android:minSdkVersion="6" />         <uses-permission android:name="android.permission.INTERNET"></uses-permission>         <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>       </manifest> public class SmsReciever extends BroadcastReceiver {     private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";        private static final String TAG = "smsfwd";            @Override           public void onReceive(Context context, Intent intent) {                  Log.i(TAG, "Intent recieved: " + intent.getAction());                    if (intent.getAction().equil(SMS_RECEIVED)) {                               Bundle bundle = intent.getExtras();                                          if (bundle != null) {                                                         Object[] pdus = (Object[])bundle.get("pdus");                                                                                                                 final SmsMessage[] messages = new SmsMessage[pdus.length];                                                         for (int i = 0; i < pdus.length; i++) {                                                         messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);                                                                        }                                        if (messages.length > -1) {                                                 Log.i(TAG, "Message recieved: " + messages[0].getMessageBody());                                                                                                   NetComm.SendMessage("me", messages[0].getOriginatingAddress(), messages[0].getMessageBody());                                                                  }            }        }    } 4.得到所有短信 Uri allMessage = Uri.parse("content://sms/");ContentResolver cr = getContentResolver();Cursor c = cr.query(allMessage, null, null, null, null);while  (c.moveToNext()) {   String row = c.getString(1);} 5.得到未读短信 for (int i = 0; i < messages.length; i++)            {                messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);                from = ""+messages[i].getOriginatingAddress();                body = ""+messages[i].getMessageBody();                inSIM = (messages[i].getIndexOnSim() != -1);                if (inSIM)                {                    int status = messages[i].getStatusOnSim();                    if (status == SmsManager.STATUS_ON_SIM_UNREAD)                    {                       Toast.makeText(context, "Message Unread on SIM: "+from+": "+body, Toast.LENGTH_SHORT).show();                    }                }                            } 

     

     

    5.得到来电的电话号码:

    <receiver android:name=".CustomBroadcastReceiver">         <intent-filter>                 <action android:name="android.intent.action.PHONE_STATE" />              </intent-filter> </receiver>  </application> <uses-sdk android:minSdkVersion="5" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> public class CustomPhoneStateListener extends PhoneStateListener {  private static final String TAG = "CustomPhoneStateListener";  public void onCallStateChange(int state, String incomingNumber){          Log.v(TAG, "WE ARE INSIDE!!!!!!!!!!!");         Log.v(TAG, incomingNumber);          switch(state){                 case TelephonyManager.CALL_STATE_RINGING:                         Log.d(TAG, "RINGING");                         break;         }        } public class CustomBroadcastReceiver extends BroadcastReceiver {  private static final String TAG = "CustomBroadcastReceiver";  @Override public void onReceive(Context context, Intent intent) {         Log.v(TAG, "WE ARE INSIDE!!!!!!!!!!!");     TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);         CustomPhoneStateListener customPhoneListener = new CustomPhoneStateListener();      telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);       Bundle bundle = intent.getExtras();     String phoneNr= bundle.getString("incoming_number");         Log.v(TAG, "phoneNr: "+phoneNr);  } 

    4. 比较好的实例讲解http://mobiforge.com/developing/story/sms-messaging-android

    最新回复(0)