我创建了一个应用程序,用于创建gpx文件。除了共享功能外,一切都正常运行。 因此,我创建了一个文件提供程序。您可以查看其配置信息如下。该提供程序在我的运行Android 8.0.0的安卓设备上运行良好,但在朋友的华为(6.0)上不起作用。
Fatal Exception: java.lang.IllegalArgumentException
Failed to find configured root that contains /storage/8737-15E4/Android/data/XXX/cache/20171009_171900.gpx
Manifest中的提供者:
<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>
file_paths.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);
我希望有人能够帮助我找出导致应用在某些设备上崩溃的错误...
FileProvider
不支持可移动存储作为<external-cache-dir>
等代替物。我无法解释为什么FileProvider
显然可以获得getExternalCacheDir()
的一个值,而你的代码会得到另一个值。在你的代码中context
到底是什么?这个Context
是从哪里来的? - CommonsWareUri.forFile()
。 - CommonsWareFileProvider
,在FileProvider
不喜欢设备(无论出于什么原因)的情况下回退到Uri.forFile()
。 - CommonsWare