内容观察者
1、原理图

2、java代码
1 package com.example.contentobserver; 2 3 import android.net.Uri; 4 import android.os.Bundle; 5 import android.os.Handler; 6 import android.app.Activity; 7 import android.content.ContentResolver; 8 import android.database.ContentObserver; 9 import android.view.Menu; 10 import android.widget.Toast; 11 12 public class MainActivity extends Activity { 13 14 @Override 15 protected void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 setContentView(R.layout.activity_main); 18 19 ContentResolver resolver = getContentResolver(); 20 Uri uri = Uri.parse("content://sms/"); 21 //Uri uri = Uri.parse("content://aaa.bbb.ccc/"); 22 //关于registerContentObserver的第二个参数如果为true,则不是精确匹配;若为false则为精确匹配 23 resolver.registerContentObserver(uri, true, new MyObserver(new Handler())); 24 } 25 26 private class MyObserver extends ContentObserver{ 27 //它这里是监听公共内存块的变化 28 @Override 29 public void onChange(boolean selfChange) { 30 // TODO Auto-generated method stub 31 super.onChange(selfChange); 32 Toast.makeText(MainActivity.this, "内容发生了变化", 1).show(); 33 //System.out.println("我是第三方应用,正在观察中!"); 34 } 35 36 public MyObserver(Handler handler) { 37 super(handler); 38 // TODO Auto-generated constructor stub 39 40 } 41 42 } 43 @Override 44 public boolean onCreateOptionsMenu(Menu menu) { 45 // Inflate the menu; this adds items to the action bar if it is present. 46 getMenuInflater().inflate(R.menu.main, menu); 47 return true; 48 } 49 50 }
3、如何主动地把消息发到公共内存消息区
context.getContentResolver().notifyChange(messageuri, null);

浙公网安备 33010602011771号