ContentProvider(内容提供者),UriMatcher(Uri匹配器)

UriMatcher:工具类来帮助匹配内容提供商的uri

addURI(String authority, String path, int code)
参数1:包名
参数2:暗号,一般都写入表明
参数3:进行匹配的组件,必须积极的
添加一个URI匹配,返回此URI时的代码匹配。URI节点可能精确匹配字符串,标记“*”匹配任何文本,或令牌“#”相匹配数字。

    public static final int SUCCESS = 1;
    /**
     * 创建一个保安,检查uri的规则,如果uri匹配失败 返回-1
     */
    // UriMatcher.NO_MATCH 不匹配
    static UriMatcher mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    static {
        mUriMatcher.addURI("com.itheima.db", "account", SUCCESS);
    }

//利用内容提供者的解析器,通知内容观察者数据发生了变化
getContext().getContentResolver().notifyChange(uri, null);

ContentProvider:内容提供者的作用

应用程序创建的数据库默认都是私有的,别的应用程序不可以访问里面的数据。
如果有需求把自己应用程序私有的数据库暴露给别的用户增删改查,就需要使用内容提供者

public abstract class ContentResolver :通过URI来,访问应用程序内容

ContentResolver 是个抽象类 初始化:
ContentResolver resolver = getContentResolver();

ContentValues :该类用于存储一组值,ContentResolver 可以处理。

        // 得到内容提供者的解析器
        ContentResolver resolver = getContentResolver();
        // 内容提供者 规定头写"content://"
        Uri uri = Uri.parse("content://com.content_provider.db/account");
        ContentValues values = new ContentValues();
        // 添加数据
        values.put("name", "zhangsan");
        values.put("money", 10000);
        // 通过内容解析器让内容提供者添加一条数据
        resolver.insert(uri, values);

ContentObserver:收到电话支持更改内容。必须实现的对象添加到ContentObservable

创建一个观察者,传递 handler 来处理程序运行

    public ContentObserver(Handler handler) {
        mHandler = handler;
    }

registerContentObserver(@NonNull Uri uri, boolean notifyForDescendents,@NonNull ContentObserver observer)
参数2:true代表进行通知
注册一个观察者类时回调数据确定的特定URI更改内容。

onChange(boolean selfChange):内容发生改变时调用此方法,提醒内容进行更改

示例一:

        getContentResolver().registerContentObserver(uri, true, new ContentObserver(new Handler()) {
            @Override
            public void onChange(boolean selfChange) {
                super.onChange(selfChange);
                System.out.println("内容观察者");
            }
        });

示例二:

public class MainActivity extends Activity {
    private MyObserver observer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Uri uri = Uri.parse("content://sms");
        observer = new MyObserver(new Handler());
        getContentResolver().registerContentObserver(uri, true, observer);
    }
    private class MyObserver extends ContentObserver{

        public MyObserver(Handler handler) {
            super(handler);
        }

        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            System.out.println("onchange");
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

pluto_Min8

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

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

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

打赏作者

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

抵扣说明:

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

余额充值