【问题标题】:Can't send file correct URI using FileProvider无法使用 FileProvider 发送文件正确的 URI
【发布时间】:2017-07-04 10:43:58
【问题描述】:

我正在用这个路径创建一个文件

File file = new File(getExternalFilesDir(null) + "/package.apk");

然后我正在尝试使用此代码发送它

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(FileProvider.getUriForFile(UpdateActivity.this, getPackageName() + ".provider", file), "application/vnd.android.package-archive");
Log.d("uri",FileProvider.getUriForFile(UpdateActivity.this, getPackageName() + ".provider", file).toString());
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

我的 android 清单是

<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_paths

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-files-path name="files" path="." />
</paths>

运行代码后,我收到There was a problem parsing the package 错误,但如果我使用路径Android/my.package.name/files/package.apk 中的文件管理器打开文件,它正在解析,所以我发送的URI 不正确,然后我尝试打印它并显示结果是

content://my.package.name.provider/files/package.apk

我做错了什么?

【问题讨论】:

    标签: java android android-fileprovider


    【解决方案1】:

    您忘记在Intent 上添加FLAG_GRANT_READ_URI_PERMISSION。就目前而言,Uri 是有效的,但安装程序无权访问其内容。

    另请注意,自 Android 7.0 起,现有的 Android 安装程序仅支持 content 方案。旧版 Android 设备仅限于file

    【讨论】:

    • 谢谢,但我在包安装程序中再次遇到该错误
    • 哦,解决了我在添加FLAG_GRANT_READ_URI_PERMISSION后使用setFlags()
    猜你喜欢
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多