Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SAF-检查不在getPersistedUriPermissions()列表中的URI的权限_Android_Permissions_Subdirectory_Storage Access Framework - Fatal编程技术网

Android SAF-检查不在getPersistedUriPermissions()列表中的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 |

我的Android应用程序必须检查SAF文件夹是否被授予读/写权限

某些URI存储为字符串,因为它们是由用户选择并通过以下代码授予权限的:

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()中等等。我认为,当卸载应用程序时,有关其创建内容的权限的所有信息都会丢失,我现在正在对所有案例进行推理,不仅是关于创建了什么,还包括获得了什么。简言之,所有的持久许可都消失了。是的,我必须考虑一些设计决策一段时间。