1、监听广播
缺点,因为优先级的原因可能接收不到。
代码:
public static final String TAG = \"ImiChatSMSReceiver\"; public static final String SMS_RECEIVED_ACTION = \"android.provider.Telephony.SMS_RECEIVED\"; public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(SMS_RECEIVED_ACTION)) { SmsMessage[] messages = getMessagesFromIntent(intent); for (SmsMessage message : messages) { String text = message.getOriginatingAddress() + \" : \" + message.getDisplayOriginatingAddress() + \" : \" + message.getDisplayMessageBody() + \" : \" + message.getTimestampMillis(); String num = message.getOriginatingAddress(); Log.i(TAG, \"-------------\" + text); Toast.makeText(context, text, Toast.LENGTH_LONG).show(); sendMessage(num, \"来自\" + num + \"的短信已经收到\", context); context.getContentResolver().registerContentObserver(Uri.parse(\"content://sms/\"), true, new SmsObserver(new Handler(), context)); } } } public void sendMessage(String num, String text, Context context) { SmsManager smsManager = SmsManager.getDefault(); PendingIntent sentIntent = PendingIntent.getBroadcast(context, 0, new Intent(), 0); String strContent = text; smsManager.sendTextMessage(num, null, strContent, sentIntent, null); TelephonyManager tl = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); int itype = tl.getPhoneType(); Log.i(TAG, \"-------------\" + \"当前卡类型为:\" + itype); if (itype == TelephonyManager.PHONE_TYPE_GSM) { Toast.makeText(context, \"当前卡类型为:GSM\", Toast.LENGTH_LONG).show(); } else if (itype == TelephonyManager.PHONE_TYPE_CDMA) { Toast.makeText(context, \"当前卡类型为 : CDMA\", Toast.LENGTH_LONG).show(); } else if (itype == TelephonyManager.PHONE_TYPE_NONE) { Toast.makeText(context, \"当前卡类型为:NONE\", Toast.LENGTH_LONG).show(); } } public final SmsMessage[] getMessagesFromIntent(Intent intent) { Object[] messages = (Object[]) intent.getSerializableExtra(\"pdus\"); byte[][] pduObjs = new byte[messages.length][]; for (int i = 0; i < messages.length; i++) { pduObjs[i] = (byte[]) messages[i]; } byte[][] pdus = new byte[pduObjs.length][]; int pduCount = pdus.length; SmsMessage[] msgs = new SmsMessage[pduCount]; for (int i = 0; i < pduCount; i++) { pdus[i] = pduObjs[i]; msgs[i] = SmsMessage.createFromPdu(pdus[i]); } return msgs; }
2、采用观察方法,监听短信数据库
public class SmsObserver extends ContentObserver { private Context mContext; public SmsObserver(Handler handler , Context context) { super(handler); mContext = context; } public void onChange(boolean selfChange) { super.onChange(selfChange); Cursor cursor =null; try { //读取收件箱中的短信 cursor = mContext.getContentResolver().query(Uri.parse(\"content://sms/inbox\"), null, null, null, \"date desc\"); String body; boolean hasDone =false; if (cursor !=null) { while (cursor.moveToNext()) { body = cursor.getString(cursor.getColumnIndex(\"body\")); if(body !=null)//&& body.equals(\"【startMyActivity】\" { hasDone =true; break; } if (hasDone) { break; } } } } catch(Exception e) { e.printStackTrace(); } finally { if(cursor!=null) cursor.close(); } } }
用到的权限:
<uses-permission android:name=\"android.permission.SEND_SMS\" /> <uses-permission android:name=\"android.permission.RECEIVE_SMS\" /> <uses-permission android:name=\"android.permission.READ_SMS\" />
本文地址:https://www.stayed.cn/item/10563
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我