zoukankan      html  css  js  c++  java
  • Android 四大组件学习之ContentProvider五

    上几节学习了ContentProvider的实际用途,读取短信。插入短信,读取联系人。插入联系人等。 本节课在学习ContentProvider的观察者。

    在生活中有第三方的软件。比方什么短信软件。此短信软件是替代了系统中自带的短信软件。当然可读取短信就是利用的ContentProvider。可是此等软件为何能实时的把接受的短信显示出来呢?  这就用到我们的内容观察者。

    什么是内容观察者呢?  就是一直在观察系统是否有新短信。假设有新短信就会提示第三方软件赶快去数据库中取短信信息。这样就能实时的获取系统的短信了


    举例说明:

    public class MyContentObserverActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_readcontact);
            /**
             * uri: 监听的是那个uri上的内容提供者的通知
             * true:代表的是"content://sms", content://sms/inbox", "content://sms/outbox"都能够匹配
             * false: 代表的是: "content://sms"仅仅匹配这个
             * 当数据改变后就会调用这个匿名类中的onchange方法
             */
            getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, 
                    new ContentObserver(new Handler()) {
                
                    @Override
                    public void onChange(boolean selfChange) {
                        // TODO Auto-generated method stub
                        //super.onChange(selfChange);
                        Log.i("MyContentObserverActivity", "有新消息了!!!");
                        ContentResolver cResolver = getContentResolver();
                        /**
                         * uri: 是短信提供者的url,能够通过查看源代码获得
                         * projection:须要查询的几个字段,关心那个查询按个即可
                         * 按日期排序,取最后一个
                         */
                        Cursor cursor = cResolver.query(Uri.parse("content://sms"), new String[]{"address", "date", "type", "body"},
                                null, null, "date");
                        if(cursor.moveToLast())
                        {
                            String address = cursor.getString(cursor.getColumnIndex("address"));
                            String date = cursor.getString(cursor.getColumnIndex("date"));
                            String type = cursor.getString(cursor.getColumnIndex("type"));
                            String body = cursor.getString(cursor.getColumnIndex("body"));
                            
                            Log.i("ReadMessageActivity", address + ";" + date + ";" + type + ";" + body);
                        }
                    }
            });
        }
    }
    
    
    
    然后你能够在模拟器上发送一条短信,这时候你就会看到控制台有短信信息输出

    这样就取到最新的消息了。


    今天就到这里。






  • 相关阅读:
    test
    ws318 配置
    电影地址:
    白岩松给青少年的7个忠告,值得好好阅读~
    干部带队伍的四个知道,一个跟上
    CDOJ 1259 昊昊爱运动 II bitset+线段树
    codeforces 508D . Tanya and Password 欧拉通路
    poj 1041 John's trip 欧拉回路
    poj 1651 Multiplication Puzzle 区间dp
    poj 2955 Brackets 区间dp
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/7116370.html
Copyright © 2011-2022 走看看