如何在Android上请求权限

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

我是Android Studio的新手,只想为自己制作一个基本的应用程序,我无法在手机上请求任何权限,它只是自动拒绝。 我正在使用 Kotlin,但也尝试过 Java(因为我多年前学过 Java,但从未学过在 Android 上编写代码)。 我的手机是 OnePlus Nord 2t(如果这有什么区别的话),并且使用 API 33。我的项目的 SDK 最低为 API 30。

我已经确保 build.gradle minSDK 和 targetSdk 没问题,并将此行添加到 AndroidManifest.xml 中:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
// also tried to add tools:node="replace" and tools:remove="android:maxSdkVersion" because I saw people mentionning it

这是我现在的全部代码

package com.example.testpermissions

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.Manifest
import android.content.pm.PackageManager
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat

class MainActivity : AppCompatActivity() {

    private val READ_EXTERNAL_STORAGE_PERMISSION_CODE = 101

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Check if the permission is already granted
        if (ContextCompat.checkSelfPermission(
                this,
                Manifest.permission.READ_EXTERNAL_STORAGE
            ) == PackageManager.PERMISSION_GRANTED
        ) {
            // Permission is already granted.
            Toast.makeText(this, "already ok", Toast.LENGTH_SHORT).show()
        } else {
            Toast.makeText(this, "prompting", Toast.LENGTH_SHORT).show()
            // Permission is not granted.
            ActivityCompat.requestPermissions(
                this,
                arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
                READ_EXTERNAL_STORAGE_PERMISSION_CODE
            )
        }
    }

    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)

        if (requestCode == READ_EXTERNAL_STORAGE_PERMISSION_CODE) {
            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // Permission granted.
                Toast.makeText(this, "ok", Toast.LENGTH_SHORT).show()
            } else {
                Toast.makeText(this, "not ok", Toast.LENGTH_SHORT).show()
                // Permission denied by the user.
            }
        }
    }
}

如您所见,我使用 Toast 来查看哪些内容有效或无效,我所拥有的只是“提示”然后“不好”,之后应用程序继续正常运行。

提前感谢您的帮助。

android kotlin android-permissions
1个回答
0
投票

如果您查看文档,您将看到:

注意:从 API 级别 33 开始,此权限无效。如果你的 应用程序访问其他应用程序的媒体文件,请求其中一个或多个 权限改为:READ_MEDIA_IMAGES、READ_MEDIA_VIDEO、 READ_MEDIA_AUDIO。了解有关存储权限的更多信息 与媒体文件关联。

因此,如果您需要访问特定媒体文件,则需要请求不同的权限。

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