当前位置: 首页 > 知识库问答 >
问题:

Android Fileprovider:未能找到包含

吴丁雷
2023-03-14

我创建了一个应用程序,创建gpx文件。除了分享,一切都很好。因此,我创建了一个文件提供程序。你可以在下面看到它的配置。提供商在运行Android8.0.0的Android设备上工作正常,但在朋友华为(6.0)上不工作

Fatal Exception: java.lang.IllegalArgumentException
Failed to find configured root that contains /storage/8737-15E4/Android/data/XXX/cache/20171009_171900.gpx

清单中的提供者:

<provider
        android:name=".GenericFileProvider"
        android:authorities="com.package.test.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>

文件路径。xml:

<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-files-path name="external-files" path="/" />
<external-cache-path name="cache-files" path="/" />
</paths>

代码中的用法:

File gpxFile = new File(context.getExternalCacheDir(), "20171009_171900.gpx");    
Uri gpxContentUri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", gpxFile);

        Intent gpxIntent = new Intent(Intent.ACTION_SEND);
        gpxIntent.setType("text/gpx");

        gpxIntent.putExtra(Intent.EXTRA_STREAM, gpxContentUri);

        Intent programChooser = Intent.createChooser(gpxIntent, context.getString(R.string.select_app_to_share));
        programChooser.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

        activityForDialog.startActivity(programChooser);

我希望有人能帮我找到导致应用程序在某些设备上崩溃的错误...

共有1个答案

邓威
2023-03-14

修改您的“代码用法:”并替换第二行

Uri gpxContentUri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", gpxFile);

为此:

Uri gpxContentUri;
try {
    gpxContentUri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", gpxFile);
} catch (IllegalArgumentException e) {
    StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
    StrictMode.setVmPolicy(builder.build());
    gpxContentUri = Uri.fromFile(gpxFile);
}

注意:这个错误似乎只出现在运行Android7.0的“华为P8精简版(PRA-LX1)”上,魔咒说它只发生在他朋友的华为(6.0)上。我开始认为这只是那些手机的问题,但是有一个变通办法是好的。

 类似资料:
  • 我知道关于这个问题有很多问题。我尝试了大约10种不同的方法,但都没有成功。我总是会遇到下一个错误: 官方教程也没有帮助。我将在下面分享我的代码,也许我做错了什么,你知道这里到底出了什么问题。。 清单: provider_paths.xml 我将文件保存到: 文件路径的示例:file:///storage/emulated/0/Android/data/app.kwork/files/IMG-afb

  • 我找到了这么多与FileProvider相关的链接,但我没有找到缓存目录的解决方案 JAVAlang.IllegalArgumentException:未能找到包含 我想使用它的缓存目录,我怎么能给路径提供商。 我用它作为: 它的工作罚款,如果我给应用程序文件夹路径,但不与缓存目录工作。 有什么帮助吗?

  • 我试图发送使用tcp套接字的文件列表,但我得到这个文件提供商错误。谢啦 原因:java。lang.IllegalArgumentException:未能找到包含 文件路径 文件路径。xml manifest.xml:

  • 我正在学习GCM(谷歌云消息传递,旧的不建议使用的名称是C2DM)。我使用不同的设备。操作运行良好,即使应用程序关闭。但是在nexus平板电脑上,当应用程序关闭时会发生错误。如果应用程序正在进行,我的GCM代码在我尝试的所有设备上都能工作。现在:我寻找这些问题,我发现有其他的错误清单。如果我的清单是错误的,为什么除了nexus平板电脑以外的其他设备都正确执行我的代码?我可以认为我的清单是错误的吗?

  • 构建基本的应用程序,并获得IllegalArgument异常:有一个按钮启动相机应用程序,我试图将图像保存到图片。 发现一些类似问题,但无法解决我的问题: Android:FileProvider IllegalArgumentException未能找到包含/data/data/**/files/Videos/final的已配置根目录。mp4 FileProvider“找不到配置的根目录”异常 下