ContentProvider概述 获取系统ContentProvider 发信箱


package com.example.tyxiong.myapplication;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
import android.widget.Toast;

/*
* ContentProvider实现数据共享>>>
* 3句概述:
*   1 ContentProvide是各应用程序之间共享数据的标准API
*   2 应用想要暴露其数据,可借用ContentProvider来实现,其它应用通过ContentResolver来操作暴露的数据.
*   3 四大组件之一需要在AndroidManifest.xml中显式配置.
*
*   ContentProvider:对象6方法,insert()/delete()/update()/query()/onCreate()唯一生命周期方法/getType(Uri uri)当前Uri代表的数据的MIME类型
*   如果Uri代表的数据可能有多条记录,MIME类型字符串应以vnd.android.cursor.dir/开头  一条记录的话vnd.android.cursor.item开头.
    ContentProvider就像一个网站.
    使用2步:
        1 要实现自己的ContentProvider就要继承基类.重写方法6方法.
        2 向AndroidManiest.xml注册网站. 3属性<provider sendmessage: authorities: exported> 名称 权限(网站主机) 允许其它应用调用

       Uri:资源统一标识符 content://authorities/资源
       协议 (authorities)主机 资源(路径)动态改变的.如content://com.example.tyxiong.myapplication/words/2
       words/2为资源部分(路径)---2为记录(ID)若后面还有,数据列
       1方法 URi.parse()---String--->URi

    ContentResolver:就像HttpClient(客户端),有4方法 insert()/delete()/update()/query()
    使用步骤2步:
        1 ContentResolver对象.. contextr的getContentResolver();
        2 调用4个方法来操作ContentProvider的共享数据啦..(实现4个方法间接的是调用的ContentProvider的4个对应方法.)

 **ContentProvider一般为单实例的,多个应用的ContentProvider请求会交由一个ContentProvider来处理.
     ContentProvider只有一个onCreate()生命周期方法,当ContentResolver第一次访问ContentProvider时,被回调一次.

     UriMatcher类:用来匹配ContentProvider的Uri.---不匹配的Uri不能访问ContentProvider.
     使用3步:
        1 实例化 new UriMatcher()
        2 addUri()向该UriMatcher对象注册Uri   authority path 标识符...解析出来匹配会返回相应标识符,#为通配符.
        3 match()对象方法匹配Uri

     ContentUtils类:操作Uri字符串的工具类.
        2静态方法 withAppendedId(uri,id)为路径加上ID(记录)
                parseId(uri)从Uri中解析出ID


   操作系统的ContentProvider---系统的应用也会暴露出数据,允许访问,加权限,查Uri 同样的方法可获取  如联系人 多媒体内容.

   ContentProvider数据改变时,也要添加监听来,来监听数据的改变.
        ContentProvider有方法注册registerContentObserver();为指定Uri注册监听,其数据将会触发监听方法.
        ContentObserver--监听器.

系统的ContentProvider
 监听用户发出的短信....
 Uri为content://sms/outbox  发信箱
 需要权限:READ_SMS
 2步:1 ContentResolver对象,注册监听.
     2 调用增删改查方法.操作ContentProvider的共享的数据.
     3 处理结果集Cursor
 */


public class MainActivity extends Activity {

    public static final String SMS_URI = "content://sms";

    ContentResolver contentResolver;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       // setContentView(R.layout.activity_main);
        contentResolver = getContentResolver();
        contentResolver.registerContentObserver(Uri.parse(SMS_URI), true,
                new ContentObserver(new Handler()) {
                    @Override
                    public void onChange(boolean selfChange) {//uri对应数据改变触发方法,需要有
                        // contentResolver.notify()哦.
                        super.onChange(selfChange);
                        Cursor cursor = contentResolver.query(Uri.parse(SMS_URI + "/outbox"), //发信箱数据改变触发
                                null, null, null, null);//查询所有记录.
                        StringBuilder sb = null;
                        while (cursor.moveToNext()) {
                            sb = new StringBuilder();
                            sb.append("正在向"+cursor.getString(cursor.getColumnIndex("address"))+"发送信息>>");//地址
                            sb.append("内容为"+cursor.getString(cursor.getColumnIndex("body")));//内容
                            sb.append(cursor.getString(cursor.getColumnIndex("date")));//时间
                        }
                        Toast.makeText(MainActivity.this, sb, Toast.LENGTH_SHORT).show();
                    }
                });
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋葵好吃吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值