Android之内容提供者ContentResolver

知识点:

1、关于内容提供者(ContentResolver)的方法讲解;

2、getActivity()方法;

3、getContentResolver()方法;

4、getPersistedUriPermissions()方法;

5、releasePersistableUriPermission();


getContentResolver()

getContentResolver()是context里面的一个抽象方法,主要是用来返回一个内容提供者ContentResolver实例给你的APP

public abstract ContentResolver getContentResolver();

ContentResolver类takePersistableUriPermission方法:

此方法是取得一个被提供授权的可持久化的URI权限。一旦被授权,此权限的授权会被记住知道设备被重启。只有被授予了FLAG_GRANT_PERSISTABLE_URI_PERMISSION的URI权限才能够被持久化。如果此权限已经被授权,再去请求此权限,会触发UriPermission类下面的getPersistedTime()方法。此方法会返回第一次请求授权的milliseconds时间,时间从1970年1月1号 0点开始,如果没被授权,则会返回一个不可用时间(UriPermission类下的INVALID_TIME字段);

public void takePersistableUriPermission(@NonNull Uri uri,
            @Intent.AccessUriMode int modeFlags) {
        Preconditions.checkNotNull(uri, "uri");
        try {
            ActivityManagerNative.getDefault().takePersistableUriPermission(
                    ContentProvider.getUriWithoutUserId(uri), modeFlags, resolveUserId(uri));
        } catch (RemoteException e) {
        }
    }


ContentResolver类getPersistedUriPermissions()方法:

返回所有已经被调用APP授权并持久化的URI权限。这里注意,返回的是调用此takePersistableUriPermission(Uri, int)方法,并且得到用户授权的URI权限才会返回。一些返回的权限可能会因为用户没有解锁而不可用。无入参。

public @NonNull List<UriPermission> getPersistedUriPermissions() {
        try {
            return ActivityManagerNative.getDefault()
                    .getPersistedUriPermissions(mPackageName, true).getList();
        } catch (RemoteException e) {
            throw new RuntimeException("Activity manager has died", e);
        }
    }


ContentResolver类releasePersistableUriPermission()方法:

此方法的作用是:释放所有必须由takePersistableUriPermission(Uri, int)方法申请并授权的所有权限。任何没有被授权的URI权限则不会被影响。

入参uri是content:开头,例如: content://com.android.externalstorage.documents/tree/primary%3AAlarms

public void releasePersistableUriPermission(@NonNull Uri uri,
            @Intent.AccessUriMode int modeFlags) {
        Preconditions.checkNotNull(uri, "uri");
        try {
            ActivityManagerNative.getDefault().releasePersistableUriPermission(
                    ContentProvider.getUriWithoutUserId(uri), modeFlags, resolveUserId(uri));
        } catch (RemoteException e) {
        }
    }


本文将持续更新,请关注,谢谢!





  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值