我們通常只監聽獲取手機收到的短信,但是最近有需求獲取手機發出取得短信,度娘了一把,終於找到答案,在此做個筆記:
監聽發送短信
1.Android系統提供了Provider對短信進行查詢,當發出短信時也會發送更改通知
2.定義一個Observer監聽"content://sms"
3.在onChange()方法中查詢用戶發送的短信"content://sms/outbox"
4.短信發送信息存放在數據庫 date/date/com.android.providers.telephony
5.需要權限<uses-permission android:name="android.permission.READ_SMS" />
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, new SmsObserver(new Handler()));
}
//監聽發送的短信
private final class SmsObserver extends ContentObserver {
public SmsObserver(Handler handler) {
super(handler);
}
public void onChange(boolean selfChange) {
ContentResolver resolver = getContentResolver();
//查到發出的短信
Uri uri = Uri.parse("content://sms/outbox");
Cursor cursor = resolver.query(uri, new String[] { "date", "address", "body" }, null, null, "_id desc limit 1");
if (cursor.moveToNext()) {
long ms = cursor.getLong(0);
String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(ms));
String address = cursor.getString(1);
String body = cursor.getString(2);
System.out.println(date + " " + address + " " + body);
}
}
}