ContentObserver(内容监听者)的用法

为了监听ContentProvider的数据变化,需要通过ContentResolver向指定Uri注册ContentObserver监听器。
ContentResolver提供了如下方法来注册监听器:

regsterContentObserver(Uri uri, boolean notifuForDescendents, ContentObserver observer)

参数说明:

  • uri
    该监听器所监听的ContenProvider的Uri

  • notifyDescendents
    如果该参数为true,假如注册监听的Uri为conten://abc,那么Uri为content://abc/deccontent://abc/def/ghi的数据发生改变时都会出发该监听器,如果为false,那么只有content://abc的数据发生改变时才会出发该监听器

  • observer
    监听器实例

监听手机发件箱

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 

        getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, new MyOberver(new Handler())); 
    } 

    // 自定义ContentObserver监听器 
    class MyOberver extends ContentObserver { 

        public MyOberver(Handler handler) { 
            super(handler); 
            // TODO Auto-generated constructor stub 
        } 

        @Override 
        public void onChange(boolean selfChange) { 
            // TODO Auto-generated method stub 
            super.onChange(selfChange); 
            Cursor cursor = getContentResolver().query(Uri.parse("content://sms/outbox"), null, null, null, null); 
            while (cursor.moveToNext()) { 
                Log.d("TTTT", "发送内容:" + cursor.getString(cursor.getColumnIndex("body"))); 
            } 
        } 
    } 
} 
Copyright© 2020-2022 li-xyz 冀ICP备2022001112号-1