无法使用 FileProvider 发送文件正确的 URI
Can't send file correct URI using 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);
我的 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
我做错了什么?
您忘记在 Intent
上添加 FLAG_GRANT_READ_URI_PERMISSION
。目前,Uri
有效,但安装程序无权访问其内容。
另请注意,自 Android 7.0 起,库存 Android 安装程序仅支持 content
方案。较旧的 Android 设备仅限于 file
。
我正在使用此路径创建文件
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
我做错了什么?
您忘记在 Intent
上添加 FLAG_GRANT_READ_URI_PERMISSION
。目前,Uri
有效,但安装程序无权访问其内容。
另请注意,自 Android 7.0 起,库存 Android 安装程序仅支持 content
方案。较旧的 Android 设备仅限于 file
。