请求应用运行时权限(Android)

1tuwyuhd  于 2023-02-06  发布在  Android
关注(0)|答案(3)|浏览(182)

我想写一个简单的应用程序来访问设备的位置。只有我会使用这个应用程序。这是我大约10年来第一次尝试写一个Android应用程序,所以这是我第一次不得不处理运行时权限。
我的第一个问题是,鉴于应用程序仅供我使用,是否有可能绕过运行时权限代码的需要?
如果做不到这一点,是否有简单的示例代码可以填补Android documentation中的大量空白?
举一个例子:该文件包括以下内容:

when {
ContextCompat.checkSelfPermission(
        CONTEXT,
        Manifest.permission.REQUESTED_PERMISSION
        ) == PackageManager.PERMISSION_GRANTED -> {
    // You can use the API that requires the permission.
    performAction(...)

这是什么意思?什么是"需要权限的API"?什么代替了"..."?
页面上还有其他几个类似的空白。

pqwbnv8z

pqwbnv8z1#

你已经提到,应用程序是专为您使用,那么你不必编写代码的运行时权限,你可以跳过它...
怎么做呢......?
步骤1:只需将所有需要的权限放入应用程序清单文件并安装应用程序
第2步:进入手机中的应用程序设置应用程序信息并检查应用程序权限您提到的所有权限都将显示在那里,只需手动浏览即可
这就是它现在编写代码访问的东西,你应该写后获得许可

hxzsmxv2

hxzsmxv22#

1.如果您想避免运行时权限请求,您可以使用Android SDK版本低于23(Android 6 Marshmelt)构建应用
1.对于Android API Level 23或更高版本(在清单文件中添加权限后):
首先,将您的权限添加到AndroidManifest.xml文件:

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

然后在活动中:
检查权限:

fun checkPermission(permission: String): Boolean {
        return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED
    }

获取权限:

fun getPermission(permission: String) {
    ActivityCompat.requestPermissions(this, arrayOf(permission), REQ_CODE_PERMISSION)
}

获取权限结果:

override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<out String>,
    grantResults: IntArray
) {
    if (requestCode == REQ_CODE_PERMISSION && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        ...      
    }
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    }

如果使用片段:

一个片段包含一个请求权限并将结果返回到其onRequestPermissionsResult的方法:

fun getPermission(permission: String) {
    requestPermissions(arrayOf(permission), REQ_CODE_PERMISSION)
}

REQ_CODE_PERMISSION:是一些随机数,如123,用于标识请求。

pqwbnv8z

pqwbnv8z3#

是否可以绕过对运行时权限代码的需要?
您仍然需要<uses-permission>元素。但您可以通过设置应用手动向您的应用授予权限。
运行时权限代码的目的是向用户请求权限,并防止权限未被授予。在您的情况下,如果应用因为您撤销了权限而崩溃,您可以向开发人员大喊大叫。作为开发人员的您,反过来也可以向用户的您大喊大叫,因为您没有手动授予权限。因为您将向自己大喊大叫,建议在私人地点进行,或者耳朵里戴一个蓝牙耳机作为掩护。:-)
这是什么意思?
我们请求运行时权限是因为我们想使用某个受此权限保护的Android API。我们通常不请求运行时权限,因为我们有天早上醒来发现请求运行时权限听起来很有趣。
什么是"需要权限的API"?什么代替了"..."?
在您的情况下,它似乎是LocationManager上的方法或使用来自Google Play服务的融合位置API的东西。
有没有简单的示例代码可以填补Android文档中的大量空白?
问题是"示例代码" 5%与权限相关,95%与您使用的任何内容都需要权限有关。任何只显示权限的示例代码都将具有您不喜欢的文档中的相同的手动波形内容。在您的情况下,任何使用位置API的最新示例都应该显示运行时权限元素。
FWIW,this directory包含了this book中的几个示例项目,它们显示了获取位置。它们有点旧,但确实显示了请求运行时权限(大部分包含在AbstractPermissionActivity中)。This sample较新,在Kotlin中,但它是针对文件访问权限的,而不是位置(在this other book中介绍)。

相关问题