監聽手機收到簡訊並自動回覆
阿新 • • 發佈:2019-02-01
1、通過廣播監聽接收到簡訊
androidManifest.xml中許可權配置:
//讀取簡訊許可權 <uses-permission android:name="android.permission.READ_SMS"></uses-permission> <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> //回覆簡訊許可權 <uses-permission android:name="android.permission.SEND_SMS"註冊廣播:/>
<receiver android:name=".receive.SmsReciver"> <intent-filter android:priority="999"> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver>廣播中監聽到接收簡訊:
public class SmsReciver extends BroadcastReceiver { String SENT_SMS_ACTION2、通過查詢簡訊資料庫獲取簡訊內容:= "SENT_SMS_ACTION"; String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION"; private Context context; @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); SmsMessage msg = null; if (null != bundle) { Object[] smsObj = (Object[]) bundle.get("pdus"); for (Object object : smsObj) { msg = SmsMessage.createFromPdu((byte[]) object); Date date = new Date(msg.getTimestampMillis());//時間 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String receiveTime = format.format(date); System.out.println("number:" + msg.getOriginatingAddress() + " body:" + msg.getDisplayMessageBody() + " time:" + msg.getTimestampMillis()); Log.e("簡訊號碼", "" + msg.getOriginatingAddress()); Log.e("簡訊內容", "" + msg.getDisplayMessageBody()); Log.e("簡訊時間", "" + msg.getTimestampMillis()); // sendSMS("15655973115", "自動傳送,勿回!"); } } }
private Uri SMS_INBOX = Uri.parse("content://sms/"); public void getSmsFromPhone() { ContentResolver cr = getContentResolver(); String[] projection = new String[] { "body" };//"_id", "address", "person",, "date", "type String where = " address = '1066321332' AND date > " + (System.currentTimeMillis() - 10 * 60 * 1000); Cursor cur = cr.query(SMS_INBOX, projection, where, null, "date desc"); if (null == cur) return; if (cur.moveToNext()) { String number = cur.getString(cur.getColumnIndex("address"));//手機號 String name = cur.getString(cur.getColumnIndex("person"));//聯絡人姓名列表 String body = cur.getString(cur.getColumnIndex("body")); //這裡我是要獲取自己簡訊服務號碼中的驗證碼~~ Pattern pattern = Pattern.compile(" [a-zA-Z0-9]{10}"); Matcher matcher = pattern.matcher(body); if (matcher.find()) { String res = matcher.group().substring(1, 11); } } }3、傳送簡訊:
/** * 呼叫傳送簡訊 * @param phoneNumber,對方的號碼 * @param message,傳送簡訊內容分 */ private void sendSMS(String phoneNumber, String message) { //create the sentIntent parameter Intent sentIntent = new Intent(SENT_SMS_ACTION); PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, sentIntent, 0); // create the deilverIntent parameter Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION); PendingIntent deliverPI = PendingIntent.getBroadcast(context, 0, deliverIntent, 0); SmsManager sms = SmsManager.getDefault(); if (message.length() > 70) { List<String> msgs = sms.divideMessage(message); for (String msg : msgs) { sms.sendTextMessage(phoneNumber, null, msg, sentPI, deliverPI); } } else { sms.sendTextMessage(phoneNumber, null, message, sentPI, deliverPI); } Log.e("activity成功","成功"); }