AndroidのContentProvider - SMS発送を監視する
AndroidはContentObserverを提供し、ContentProviderのデータ変更を監視する。
SMS発送を監視するサンプル
(サンプルではActivityですが、Activityを起動しないと監視できないので、現実的ではない。
Serviceで実装すべきである)
<uses-permission android:name="android.permission.READ_SMS"/>
package com.example.liguofeng.smsobserver; import android.app.Activity; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.os.Handler; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // content://smsのデータが変更されているかを監視する getContentResolver().registerContentObserver( Uri.parse("content://sms"), true, new SmsObserver(new Handler())); } // ContentObserver実装 private final class SmsObserver extends ContentObserver { public SmsObserver(Handler handler) { super(handler); } public void onChange(boolean selfChange) { // 送信箱のSMS Cursor cursor = getContentResolver().query( Uri.parse("content://sms/outbox") , null, null, null, null); // 現在発送中のSMS while (cursor.moveToNext()) { StringBuilder sb = new StringBuilder(); // SMSの送信先 sb.append("address=").append(cursor .getString(cursor.getColumnIndex("address"))); // SMSのタイトル sb.append(";subject=").append(cursor .getString(cursor.getColumnIndex("subject"))); // SMSの内容 sb.append(";body=").append(cursor .getString(cursor.getColumnIndex("body"))); // SMSの発送時間 sb.append(";time=").append(cursor .getLong(cursor.getColumnIndex("date"))); System.out.println("発送SMS:" + sb.toString()); } } } }