【问题标题】:Unable to open file in Nougat using custom file provider无法使用自定义文件提供程序在 Nougat 中打开文件
【发布时间】:2017-08-09 18:34:29
【问题描述】:

我正在尝试使用文件提供程序在牛轧糖中打开一个文件,查看了一些示例并将提供程序添加到清单并创建了 providerpath xml,如下所示:

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths"/>
</provider>

provider_path.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path
        name="/"
        path="." />
</paths>

打开文件的代码:

            Intent intent = new Intent();
            intent.setAction(android.content.Intent.ACTION_VIEW);
            File file = new File(path);

            MimeTypeMap mime = MimeTypeMap.getSingleton();
            String ext = file.getName().substring(file.getName().indexOf(".") + 1);
            String type = mime.getMimeTypeFromExtension(ext);
            Log.d(TAG, file.getAbsolutePath() + "mime " + type + " ext " + ext + "uri file " + FileProvider.getUriForFile(context,
                    BuildConfig.APPLICATION_ID + ".provider",
                    file).toString());
            Uri ur = UriHelper.getNougatUri(file);
            Log.d(TAG, "uri2 " + ur);
            intent.setDataAndType(FileProvider.getUriForFile(context,
                    BuildConfig.APPLICATION_ID + ".provider",
                    file), type);
            context.startActivity(intent);

Logcat:

08-09 12:04:39.728 18288-18288/com.app.tod D/ChatAdapter1: /storage/emulated/0/com.app.tod/Media/sent/08-09-2017 12:04 PM.jpegmime image/jpeg ext jpeguri file content://com.app.tod.provider/%2Fstorage%2Femulated%2F0%2Fcom.app.tod%2F/com.app.toado/Media/sent/08-09-2017%2012%3A04%20PM.jpeg
08-09 12:04:39.729 18288-18288/com.app.tod D/ChatAdapter1: uri2 content://com.app.tod.provider/storage/emulated/0/com.app.tod/Media/sent/08-09-2017 12:04 PM.jpeg

当我单击文件时,它会进入图库并显示无法加载图像, 图像存在于该路径-

/storage/emulated/0/com.app.tod/Media/sent/08-09-2017 12:04 PM.jpeg

有人可以告诉我如何访问我在 /storage/emulated/0/com.app.tod/ 为我的应用程序创建的文件夹中的所有文件

另外,如果我想在内部存储的其他位置打开文件,有什么办法吗?

谢谢。

【问题讨论】:

  • 只需使用ContentResolver API 即可获取Uri 内容
  • @pskink 能否请您提供一些链接或一些代码来说明如何在我的情况下执行此操作?
  • @pskink 我也不仅想打开 jpeg 或视频文件,我还想打开 pdf 等文件
  • @pskink 谢谢,但我无法理解.. 有一个文件资产描述符可以返回数据,但我无法弄清楚如何使用它打开该文件。你能检查我发布的代码并告诉我哪里错了吗?我的 provider_path.xml 代码好吗?

标签: android android-7.0-nougat internal-storage


【解决方案1】:

当我点击文件时,它会进入图库并显示无法加载图片

您没有将FLAG_GRANT_READ_URI_PERMISSION添加到Intent,因此第三方应用无法读取您的Uri标识的内容。

另请注意,您的 UriHelper.getNougatUri(file); 似乎没有用,因为您对结果所做的只是将其记录到 LogCat。

【讨论】:

  • 谢谢!你也可以看看这个[stackoverflow.com/questions/45628865/…!我想建立一个同时选择图像和视频的意图,而不是“打开”,我希望在选择完成后显示“确定”或“完成”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 2019-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多