知识点:
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:Alarms
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) { } }本文将持续更新,请关注,谢谢!