初心者Android、ContentProviderのデータ変更を監視(五十七)
2661 ワード
アプリケーションでContentProviderの変更をリスニングして応答する必要がある場合があります.ContentObserverクラスを利用します.
ContentProviderで実装、insert、delete、updateメソッドのいずれかにかかわらず、プログラムはgetContext()を呼び出す.getContentResolver().notifyChange(uri,null);
この行のコードは、ContentProviderが共有するデータが変更されたことを示すUriに登録されているすべてのリスナーに通知するために使用できます.
ContentProviderデータの変更をリスニングするリスナーはContentObserverクラスを継承し、そのベースクラスで定義されたonChangeメソッドを書き換える必要があります.このonChangeは、リスニングされたContentProviderが共有するデータが変更されるとトリガーされます.
指定されたContentProviderのデータ変化を傍受するには、ContentResolverを介して指定UriにContentObserverリスナーを登録する必要がある.
リスナーを登録するには、次の方法を使用します.
registerContentObserver(Uri uri,boolean notifyForDescendents,ContentObserver observer)
notifyForDescents:このパラメータがtrueに設定されている場合、Uriがcontent://abcあ、ではUriはcontent://abc/xyz, content://abc/xyz/fooのデータが変更されると、リスナーもトリガーされます.パラメータがfalseの場合、content://abcのデータが変更されると、Listenerがトリガーされます.
次に、傍受システムのメールを例に、次の図をシミュレーションしてメールを送信します.
上にはhelloというメールがあります.次にリスナーを起動してlogcatでメールに関する情報を印刷します.
次はコード
ContentProviderで実装、insert、delete、updateメソッドのいずれかにかかわらず、プログラムはgetContext()を呼び出す.getContentResolver().notifyChange(uri,null);
この行のコードは、ContentProviderが共有するデータが変更されたことを示すUriに登録されているすべてのリスナーに通知するために使用できます.
ContentProviderデータの変更をリスニングするリスナーはContentObserverクラスを継承し、そのベースクラスで定義されたonChangeメソッドを書き換える必要があります.このonChangeは、リスニングされたContentProviderが共有するデータが変更されるとトリガーされます.
指定されたContentProviderのデータ変化を傍受するには、ContentResolverを介して指定UriにContentObserverリスナーを登録する必要がある.
リスナーを登録するには、次の方法を使用します.
registerContentObserver(Uri uri,boolean notifyForDescendents,ContentObserver observer)
notifyForDescents:このパラメータがtrueに設定されている場合、Uriがcontent://abcあ、ではUriはcontent://abc/xyz, content://abc/xyz/fooのデータが変更されると、リスナーもトリガーされます.パラメータがfalseの場合、content://abcのデータが変更されると、Listenerがトリガーされます.
次に、傍受システムのメールを例に、次の図をシミュレーションしてメールを送信します.
上にはhelloというメールがあります.次にリスナーを起動してlogcatでメールに関する情報を印刷します.
次はコード
package WangLi.IO.MonitorSms;
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 MonitorSms extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// content://sms
this.getContentResolver().registerContentObserver(Uri.parse("content://sms"), true,
new SmsObserver(new Handler()));
}
// ContentObserver
private final class SmsObserver extends ContentObserver
{
public SmsObserver(Handler handler) {
super(handler);
// TODO Auto-generated constructor stub
}
public void onChange(boolean selfChange)
{
// ( )
Cursor cursor = getContentResolver().query(Uri.parse("content://sms/outbox"),
null, null, null, null);
// ,
while(cursor.moveToNext())
{
StringBuilder sb = new StringBuilder();
//
sb.append("address=").append(
cursor.getString(cursor.getColumnIndex("address")));
//
sb.append(";subject=").append(
cursor.getString(cursor.getColumnIndex("body")));
//
sb.append(";time=").append(
cursor.getLong(cursor.getColumnIndex("date")));
System.out.println("Has Sent SMS:::" + sb.toString());
}
}
}
}