【问题标题】:issue opening document using FLAG_GRANT_WRITE_URI_PERMISSION intent ANDROID使用 FLAG_GRANT_WRITE_URI_PERMISSION 意图 ANDROID 发出打开文档
【发布时间】:2014-07-07 18:46:40
【问题描述】:

我想使用第三方应用程序(如 Polaris office、quickoffice、kingsoft docs 等)使用选择器打开我保存在应用程序存储中的文档。我也想授予编辑文档的权限。

如果我使用 FLAG_GRANT_READ_URI_PERMISSION 打开文档,则文档可以正常打开,但如果我使用 FLAG_GRANT_WRITE_URI_PERMISSION 将外部应用程序推送但不显示所选文档。如果是 Polaris Office,则使用 FLAG_GRANT_READ_URI_PERMISSION 可以正常打开文档,但如果我使用 FLAG_GRANT_WRITE_URI_PERMISSION 它会显示不支持文档类型。

我使用的代码是

    File file = new File(
            getFilePath(data.getUniqueId(), data.getFileName()));
    Uri uri = FileProvider.getUriForFile(context, "com.example.com",
            file);

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_EDIT);
    intent.setDataAndType(uri, "application/pdf");
    intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
    Intent chooserIntent=Intent.createChooser(intent, uri.toString());
    context.startActivity(chooserIntent);

在清单中我已经提到了

 <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.example.com"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/my_paths" />
    </provider>

请告诉我我哪里错了。

我想为第三方应用提供打开和编辑所选文档的临时权限。这些文档需要存储在应用存储空间中。

【问题讨论】:

    标签: android


    【解决方案1】:

    而不是行:

        intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    

    只需输入一行:

        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION 
                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    

    我认为您的提供程序还应该将android:exported 属性设置为true(以便其他应用程序使用)。

    【讨论】:

    • android:exported 必须为假。 FileProvider 强制执行此附加限制,但通常不需要 URI 授予才能工作。
    猜你喜欢
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 2014-01-03
    • 2011-01-15
    相关资源
    最近更新 更多