Android SAF-检查不在getPersistedUriPermissions()列表中的URI的权限
我的Android应用程序必须检查SAF文件夹是否被授予读/写权限 某些URI存储为字符串,因为它们是由用户选择并通过以下代码授予权限的:Android SAF-检查不在getPersistedUriPermissions()列表中的URI的权限,android,permissions,subdirectory,storage-access-framework,Android,Permissions,Subdirectory,Storage Access Framework,我的Android应用程序必须检查SAF文件夹是否被授予读/写权限 某些URI存储为字符串,因为它们是由用户选择并通过以下代码授予权限的: static public String takePermanentReadWritePermissions(Activity activity, Intent data) { int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION |
static public String takePermanentReadWritePermissions(Activity activity, Intent data)
{
int takeFlags = data.getFlags()
&
(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
ContentResolver resolver = activity.getContentResolver();
resolver.takePersistableUriPermission(data.getData(),takeFlags);
return data.getData().toString();
}
static boolean arePermissionsGranted(Activity activity, String uriString)
{
ContentResolver resolver = activity.getContentResolver();
List<UriPermission> list = resolver.getPersistedUriPermissions();
for (int i = 0; i < list.size(); i++)
{
if(((Uri.decode(list.get(i).getUri().toString())).equals( uriString)) && list.get(i).isWritePermission()&& list.get(i).isReadPermission())
{
return true;
}
}
return false;
}
通过以下代码执行检查:
static public String takePermanentReadWritePermissions(Activity activity, Intent data)
{
int takeFlags = data.getFlags()
&
(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
ContentResolver resolver = activity.getContentResolver();
resolver.takePersistableUriPermission(data.getData(),takeFlags);
return data.getData().toString();
}
static boolean arePermissionsGranted(Activity activity, String uriString)
{
ContentResolver resolver = activity.getContentResolver();
List<UriPermission> list = resolver.getPersistedUriPermissions();
for (int i = 0; i < list.size(); i++)
{
if(((Uri.decode(list.get(i).getUri().toString())).equals( uriString)) && list.get(i).isWritePermission()&& list.get(i).isReadPermission())
{
return true;
}
}
return false;
}
静态布尔值arePermissionsGranted(活动活动、字符串URI字符串)
{
ContentResolver解析器=活动。getContentResolver();
List=resolver.getPersistedUserPermissions();
对于(int i=0;i
其他一些URI是使用SAF方法创建的,例如以前授权的文件夹中的文件夹。应授权子文件夹
尽管如此,我的应用程序必须随时检查权限授予是否仍然有效
我希望能够检查一个uri,而不考虑应用程序“空间”中的授权uri列表
因此,我还想检查未明确包含的URI
其他一些URI是使用SAF方法创建的,例如>>以前授权的文件夹中的文件夹。应授权子文件夹
不,一点也不。如果用户选择了文件夹/目录树,则您将自动访问所有文件和子文件夹。也可以复制到稍后在其中创建的文件和子文件夹
我不清楚您为什么要检查它。我希望能够以常规方式检查权限的原因是,在我的应用程序中,用户有一定的自由来选择文件夹,因此,如果删除了权限,应用程序必须进行检查,但它不知道该文件夹是否由自己创建如果该文件夹的uri不在GetPersistedUrisPermissions()中,则应查看其uri模式,并查看父文件夹是否在GetPersistedUrismissions()中等等。我认为,当卸载应用程序时,有关其创建内容的权限的所有信息都会丢失,我现在正在对所有案例进行推理,不仅是关于创建了什么,还包括获得了什么。简言之,所有的持久许可都消失了。是的,我必须考虑一些设计决策一段时间。