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

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

我想编写一个访问设备位置的简单应用。只有我会使用该应用程序。这是我大约十年来第一次编写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”?用什么代替“ ...”?

页面上还有其他几个类似的空白。

android permissions location
3个回答
0
投票

您已经提到该应用程序仅供您使用,因此您无需编写运行时权限的代码即可跳过它...

如何执行此操作...?

步骤1:只需将所需的所有权限放入应用清单文件中,然后安装该应用

第2步:转到手机中的应用程序设置应用程序信息,并检查应用程序许可权您提到的所有许可权都将显示在此处,只需手动将它们移开

就是这样,现在编写代码以访问您在获得许可后应该编写的内容


0
投票
  1. 如果要避免运行时权限请求,可以使用低于23(Android 6 Marshmellow)的Android SDK版本来构建您的应用程序>]

    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

,用于标识请求。

-1
投票

是否可以绕过运行时权限代码的需要?

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