Java 中已弃用 RequestPermissions

问题描述 投票:0回答:1

我有一个在片段中调用的函数,该函数打开一个 AlertDialog 并要求拍照或从手机拍照 。 在调用两个单独的函数presentFiles() 或presentCamera() 之前,我使用requestPermissions 检查权限。

一切正常,但我将 sdk 版本升级到 34,除了 requestPermissions 已过时(但之前也是如此),询问用户拍照或从手机访问文件的权限的窗口不再打开。

你能帮我解决这个问题吗

下面我将粘贴我的整个函数。

谢谢你

    fun displayPicker() {

    val builder = AlertDialog.Builder(this.activity)
    builder.setTitle(getString(R.string.label_add_file))

    builder.setTitle("")
        .setItems(
            arrayOf("Choisir un fichier", "Prendre une photo")
        ) { _, which ->
            if (which == 0) {
                if (requireContext().checkSelfPermission(READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                    requestPermissions(
                        arrayOf(READ_EXTERNAL_STORAGE),
                        REQUEST_PERMISSION_FILES
                    )
                } else {
                    presentFiles()
                }


            } else if (which == 1) {

                if (requireContext().checkSelfPermission(WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                    requestPermissions(
                        arrayOf(WRITE_EXTERNAL_STORAGE),
                        REQUEST_PERMISSION_CAMERA
                    )
                } else {
                    presentCamera()
                }

            }
        }

    builder.setNegativeButton(R.string.btn_cancel) { _, _ ->

    }
    builder.show()
}

   override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<out String>,
    grantResults: IntArray
  ) {
    if (requestCode == REQUEST_PERMISSION_CAMERA && permissions.contains(WRITE_EXTERNAL_STORAGE) && grantResults.first() == PackageManager.PERMISSION_GRANTED) {
        presentCamera()
    } else if (requestCode == REQUEST_PERMISSION_FILES && permissions.contains(
            READ_EXTERNAL_STORAGE
        ) && grantResults.first() == PackageManager.PERMISSION_GRANTED
    ) {
        presentFiles()
    }
}
kotlin android-studio android-permissions
1个回答
0
投票

Android 13 之后不再使用 WRITE_EXTERNAL_STORAGE 和 READ_EXTERNAL_STORAGE,请使用新权限 READ_MEDIA_IMAGES 更新您的权限数组,并在清单中添加相同的内容。

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

@RequiresApi(api = Build.VERSION_CODES.TIRAMISU)
String[] permissionNew = new String[]{ Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.CAMERA};

    private boolean checkPermissions() {
    int result;
    List<String> listPermissionsNeeded = new ArrayList<>();
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        for (String p : permissionNew) {
            result = ContextCompat.checkSelfPermission(requireActivity(), p);
            if (result != PackageManager.PERMISSION_GRANTED) {
                listPermissionsNeeded.add(p);
            }
        }
    } 
    if (!listPermissionsNeeded.isEmpty()) {
        requestPermissions(listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), 200);
        return false;
    }
    return true;
}

如果您必须写入文件,请确保您使用的是应用程序的文件目录。

© www.soinside.com 2019 - 2024. All rights reserved.