android 如何让用户在React Native中启用MANAGE_EXTERNAL_REPORT权限?

wj8zmpe1  于 2024-01-04  发布在  Android
关注(0)|答案(2)|浏览(152)

Android 11在提供对用户文件的访问时比旧版本低more restrictive
目标是提高安全性,这是可以的,但它会破坏一些应用程序。
要解决这个问题,我们可以将<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />添加到应用清单中。这允许用户进入应用设置并打开选项(允许管理所有文件):


的数据
但这本身是不够的,因为如果用户没有被要求,他们不会这样做。他们只会看到一个不工作的应用程序。
目前,React Native仓库上的这个特定权限实际上是no mention
有什么解决方案吗?我们应该能够检查该权限是否已被授予,这样我们就可以相应地采取行动,我们应该能够要求用户授予权限。

ajsxfq5m

ajsxfq5m1#

你可以使用这个库:https://www.npmjs.com/package/manage-external-storage

// check if can manage
checkManagePermission().then((isManagePermitted) => {
  console.log(isManagePermitted);
});

// request rights to manage
requestManagePermission().then((isManagePermitted) => {
  console.log(isManagePermitted);
});

字符串

wsxa1bj1

wsxa1bj12#

如果你想拥有全面的存储访问,那么你需要在你的MainActivity.kt中添加以下代码

import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.Environment
import android.provider.Settings

 class MainActivity : ReactActivity() {
   ....

   override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && 
!Environment.isExternalStorageManager()) {
       val intent = 
   Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
       val uri = Uri.fromParts("package", packageName, null)
       intent.data = uri
       startActivity(intent)
     }
   }
 }

字符串
添加此代码后,您需要重新启动服务器,现在您可以访问外部存储中的所有文件
它将要求管理所有文件一次,如果没有给出,然后再问一次
AndroidManifest.xml =>

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />


它会自动要求用户给予给予权限,所以不需要添加react本地代码来做到这一点。

相关问题