ContentObserver内容监听者(内容观察者)

来源:互联网 发布:大数据的实践包括 编辑:程序博客网 时间:2024/05/18 02:53

ContentObserver(内容监听者——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于

   数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri发生变化时,便会触发它。触发器分为表触发器、行触发器,

  相应地ContentObserver也分为“表“ContentObserver、“行”ContentObserver,当然这是与它所监听的Uri MIME Type有关的。

 

           熟悉Content Provider(内容提供者)的应该知道,我们可以通过UriMatcher类注册不同类型的Uri,我们可以通过这些不同的

    Uri来查询不同的结果。根据Uri返回的结果,Uri Type可以分为:返回多条数据的Uri、返回单条数据的Uri。

下面是我写的获取短信内容的监听demo:

1.界面

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"    android:layout_width="match_parent" android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.smz.g150831android_tell.MainActivity">    <TextView android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="获取短信内容"        android:id="@+id/tv_main_number"/></LinearLayout>
2.实现方法
public class MainActivity extends AppCompatActivity {    private TextView textView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        textView = (TextView) findViewById(R.id.tv_main_number);        Handler handler=new Handler(){            @Override            public void handleMessage(Message msg) {                super.handleMessage(msg);                Bundle bundle=msg.getData();                textView.setText(bundle.getString("number"));            }        };        this.getContentResolver().registerContentObserver(Uri.parse("content://sms"),true,new MyObserver(handler));    }    class MyObserver extends ContentObserver{        private Handler handler;        public MyObserver(Handler handler) {            super(handler);            this.handler=handler;        }        @Override        public void onChange(boolean selfChange) {            Log.i("test","来信息了");            Cursor cursor=MainActivity.this.getContentResolver().query(Uri.parse("content://sms/inbox"),null,null,null,null);            if(cursor.moveToNext()){                if(cursor.getString(cursor.getColumnIndex("address")).equals("+8613618420454")){                    Log.i("test","来短信了");                    String date=cursor.getString(cursor.getColumnIndex("body"));                    String data[]=date.split(":");                    String datas=data[1];                    String number=datas.substring(0,4);                    Log.i("test",number);                    Message ms=new Message();                    Bundle bundle=new Bundle();                    bundle.putString("number",number);                    ms.setData(bundle);                    handler.sendMessage(ms);                }            }        }    }}
需要了解更多的可以浏览这个网站:http://blog.csdn.net/qinjuning



0 0
原创粉丝点击