电话短信问题
其实无论呼入呼出 都可以使用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