内容观察者

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);

 

posted @ 2016-03-23 11:24  zhongyinghe  阅读(242)  评论(0)    收藏  举报