1. 程式人生 > >監聽手機收到簡訊並自動回覆

監聽手機收到簡訊並自動回覆

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_ACTION 
= "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", "自動傳送,勿回!"); } } }
2、通過查詢簡訊資料庫獲取簡訊內容:
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成功","成功");
}