所有應用發送短信(包括 SmsManager.sendTextMessage)最終都會寫入系統 SMS Provider(content://sms/sent)。
ContentObserver 監聽 content://sms URI 變化onChange 回調中查詢最新 type=2 (SENT) 記錄public class SmsObserver extends ContentObserver {
public SmsObserver(Handler handler) { super(handler); }
@Override
public void onChange(boolean selfChange, Uri uri) {
Cursor c = context.getContentResolver().query(Uri.parse("content://sms/sent"),
new String[]{"address", "body", "date"}, null, null, "date DESC");
if (c.moveToFirst()) {
String phone = c.getString(0);
String body = c.getString(1);
// 處理業務邏輯
}
c.close();
}
}
// 在 Service/Application 中註冊
getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, new SmsObserver(new Handler()));
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
此法不需 Root,覆蓋所有發送途徑。