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