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

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

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

  1. // check if can manage
  2. checkManagePermission().then((isManagePermitted) => {
  3. console.log(isManagePermitted);
  4. });
  5. // request rights to manage
  6. requestManagePermission().then((isManagePermitted) => {
  7. console.log(isManagePermitted);
  8. });

字符串

wsxa1bj1

wsxa1bj12#

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

  1. import android.content.Intent
  2. import android.net.Uri
  3. import android.os.Build
  4. import android.os.Bundle
  5. import android.os.Environment
  6. import android.provider.Settings
  7. class MainActivity : ReactActivity() {
  8. ....
  9. override fun onCreate(savedInstanceState: Bundle?) {
  10. super.onCreate(savedInstanceState)
  11. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R &&
  12. !Environment.isExternalStorageManager()) {
  13. val intent =
  14. Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
  15. val uri = Uri.fromParts("package", packageName, null)
  16. intent.data = uri
  17. startActivity(intent)
  18. }
  19. }
  20. }

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

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


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

展开查看全部

相关问题