Android N 7.0中报错:android.os.FileUriExposedException的解决方法

  • Post category:http

Android N7.0中报错:android.os.FileUriExposedException的解决方法

在Android N7.0及以上版本中,如果我们使用file:// URI访问文件,就会出现android.os.FileUriExposedException的错误提示。这个错误提示通常由于安全性问题导致的。本文将提供详细的解决攻略,包括两个示例说明。

解决方案:FileProvider

在Android N7.0及以上版本中,我们应该使用FileProvider来访问文件。FileProvider是一个特殊的ContentProvider,它允许我们共享文件,同时保护应用程序的私密文件。

解决方案:

  1. 在AndroidManifest.xml文件中添加FileProvider的声明。
<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="com.example.myapp.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>
  1. 创建一个file_paths.xml文件,指定我们要共享的文件路径。
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="my_files" path="Android/data/com.example.myapp/files/" />
</paths>
  1. 在代码中使用FileProvider.getUriForFile()方法获取文件的URI。
File file = new File(getExternalFilesDir(null), "test.txt");
Uri uri = FileProvider.getUriForFile(this, "com.example.myapp.fileprovider", file);

示例1:使用FileProvider

假设我们有一个名为“test”的文件,我们想要在应用程序中访问它。

解决方案:

我们可以使用FileProvider来访问文件。正确的代码如下:

  1. 在AndroidManifest.xml文件中添加FileProvider的声明。
<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="com.example.myapp.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>
  1. 创建一个file_paths.xml文件,指定我们要共享的文件路径。
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="my_files" path="Android/data/com.example.myapp/files/" />
</paths>
  1. 在代码中使用FileProvider.getUriForFile()方法获取文件的URI。
File file = new File(getExternalFilesDir(null), "test.txt");
Uri uri = FileProvider.getUriForFile(this, "com.example.myapp.fileprovider", file);

示例2:使用Intent共享文件

假设我们想要使用Intent共享文件。

解决方案:

我们可以使用FileProvider来共享文件。正确的代码如下:

File file = new File(getExternalFilesDir(null), "test.txt");
Uri uri = FileProvider.getUriForFile(this, "com.example.myapp.fileprovider", file);

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(intent, "Share File"));

总结

在Android N7.0及以上版本中,如果我们使用file:// URI访问文件,就会出现android.os.FileUriExposedException的错误提示。这个错误提示通常是由于安全性问题导致的。本文提供了详细的解决攻略,包括使用FileProvider和使用Intent共享文件。在实际使用中,我们应该根据具体情况选择合适的解决方案,以确保能够正常访问和共享文件。