转自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