无法使用FileProvider发送文件正确的URI

时间:2017-07-04 10:43:59

标签: java android android-fileprovider

我正在使用此路径创建文件

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);

我的机器人清单是

<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 I&#39 ; m发送不正确然后我尝试打印它,结果是

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

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您忘了在FLAG_GRANT_READ_URI_PERMISSION上添加Intent。就目前而言,Uri有效,但安装人员无权访问其内容。

另请注意,自Android 7.0起,Android安装程序仅支持content计划。较旧的Android设备仅限file