返回

React-Native 中 Android 设备上的 WRITE_EXTERNAL_STORAGE 权限被拒绝问题如何解决?

Android

React-Native 中 Android 设备上的 WRITE_EXTERNAL_STORAGE 权限拒绝问题

问题概述

在将 React-Native 应用程序构建上传到 PlayStore 时,你可能会遇到 "WRITE_EXTERNAL_STORAGE 权限被拒绝" 错误。此错误表示应用程序没有获得外部存储访问权限,这将阻止应用程序执行某些关键操作,例如存储或检索文件。

解决方案

要解决 WRITE_EXTERNAL_STORAGE 权限拒绝问题,你可以采取以下步骤:

  • 在 AndroidManifest.xml 中添加权限: 在项目的 AndroidManifest.xml 文件中,添加 元素,以声明 WRITE_EXTERNAL_STORAGE 权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  • 在 app/build.gradle 中设置 minSdkVersion: 在项目的 app/build.gradle 文件中,将 minSdkVersion 设置为 33 或更高,以确保应用程序针对最新的 API 进行构建。
defaultConfig {
    minSdkVersion 33
    targetSdkVersion 33
}
  • 在 MainActivity 中请求权限: 在项目的 MainActivity.java 文件中,添加代码以在运行时请求 WRITE_EXTERNAL_STORAGE 权限。
private fun requestStoragePermission() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), REQUEST_STORAGE_PERMISSION_CODE)
    }
}
  • 在 onRequestPermissionsResult() 中处理结果: 在 MainActivity.java 文件中,重写 onRequestPermissionsResult() 方法以处理权限请求的结果。
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    if (requestCode == REQUEST_STORAGE_PERMISSION_CODE) {
        if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 权限已授予
        } else {
            // 权限未授予
        }
    }
}

其他提示

  • 确保设备运行的是 Android 12 或更高版本,因为 API 级别 33 对应于 Android 13。
  • 如果应用程序需要存储访问权限,请确保在 app/src/main/res/xml/provider_paths.xml 文件中声明文件提供程序。
  • 测试应用程序以确保权限请求和处理正确无误。

结论

通过遵循这些步骤,你应该可以解决 "WRITE_EXTERNAL_STORAGE 权限被拒绝" 错误,并且你的 React-Native 应用程序将能够在 Android 设备上写入外部存储。

常见问题解答

  1. 为什么会出现 WRITE_EXTERNAL_STORAGE 权限拒绝问题?
    它可能是由于以下原因:
    • 应用程序的 AndroidManifest.xml 文件中未声明该权限。
    • 应用程序的 minSdkVersion 设置为低于 33。
    • 应用程序未在运行时请求该权限。
    • 用户已拒绝授予该权限。
  2. 如何在 Android 12 上请求 WRITE_EXTERNAL_STORAGE 权限?
    你需要在应用程序的 AndroidManifest.xml 文件中添加 元素,并在运行时使用 ActivityCompat.requestPermissions() 请求权限。
  3. 文件提供程序是什么?
    文件提供程序是一种 Android 组件,允许应用程序共享文件,而无需授予其他应用程序对设备存储的完全访问权限。
  4. 如何调试 WRITE_EXTERNAL_STORAGE 权限问题?
    你可以使用 Logcat 或 Android Studio 的 Debugger 来检查权限请求和处理过程中的错误或异常。
  5. 除了 WRITE_EXTERNAL_STORAGE 权限之外,我可能还需要哪些权限?
    这取决于应用程序的功能。其他常见的权限包括 READ_EXTERNAL_STORAGE、ACCESS_FINE_LOCATION 和 INTERNET。