gpt4 book ai didi

安卓 getUriForFile IllegalArgumentException

转载 作者:行者123 更新时间:2023-11-30 00:54:37 26 4
gpt4 key购买 nike

我使用 Intent 发送文件的代码不适用于所有文件源,我还找不到解决方案:

我的应用程序已注册用于打开文件,因此当我在 ES 文件资源管理器中选择一个文件时, Intent 如下所示:

intent->mData->uriString=/storage/emulated/0/backups/apps/NextGenEndPoint_1.0.apk    

Asus File Manager 中选择相同的文件时我得到以下 Intent :

intent->mData->uriString=/file/sdcard/backups/apps/NextGenEndPoint_1.0.apk

这是我的代码:

        // With this path it works. Path example being sent by e.g ES File Explorer
String fileName = "/storage/emulated/0/backups/apps/PDFViewer.apk";
// with this path it doesn't. This path is sent by Asus File Explorer
fileName = "/file/sdcard/backups/apps/PDFViewer.apk";
final Intent installIntent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
installIntent.setData(getUriForFile(context, "com.myapp.fileprovider", new File(fileName)));
installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION);
context.startActivity(installIntent);

我也试过 new File("/file/sdcard/backups/apps/PDFViewer.apk").exists();什么返回 false。

xml:

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

以及 list 中的提供者:

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

异常:

 11-02 12:21:09.004: E/ACRA(9807): com.mycompany.myapp fatal error : Failed to find configured root that contains /file/sdcard/PDFViewer.apk
11-02 12:21:09.004: E/ACRA(9807): java.lang.IllegalArgumentException: Failed to find configured root that contains /file/sdcard/PDFViewer.apk
11-02 12:21:09.004: E/ACRA(9807): at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(SourceFile:711)
11-02 12:21:09.004: E/ACRA(9807): at android.support.v4.content.FileProvider.getUriForFile(SourceFile:400)

我错过了什么?

最佳答案

在引用的文件中:

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

使用文件路径而不是外部路径

使用Environment.getExternalStorageDirectory()

关于安卓 getUriForFile IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40386491/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com