我想编写一个访问设备位置的简单应用。只有我会使用该应用程序。这是我大约十年来第一次编写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”?用什么代替“ ...”?
页面上还有其他几个类似的空白。
您已经提到该应用程序仅供您使用,因此您无需编写运行时权限的代码即可跳过它...
如何执行此操作...?
步骤1:只需将所需的所有权限放入应用清单文件中,然后安装该应用
第2步:转到手机中的应用程序设置或应用程序信息,并检查应用程序许可权您提到的所有许可权都将显示在此处,只需手动将它们移开
就是这样,现在编写代码以访问您在获得许可后应该编写的内容
首先,将您的权限添加到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
是否可以绕过运行时权限代码的需要?