Android开发——运行时请求权限

本文介绍了Android应用如何处理权限问题,包括检查应用是否拥有特定权限的方法,以及如何向用户请求权限。从Android6.0开始,用户可以在应用运行时授予权限,而非安装时。文章详细讲解了如何使用ContextCompat.checkSelfPermission和ActivityCompat.requestPermissions来实现这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于Android 5.1或者更低版本,或者应用的目标SDK是22或者更低,如果列出了需要访问用户私密信息的危险权限,那么用户必须在安装时授予此权限。从Android 6.0(API 23)开始,用户在应用运行时向其授予危险权限,而不是在安装时授予。

为什么?
这可以简化应用安装过程,因为用户在安装或者更新应用时不需要授予权限;
还让用户可以对应用的功能进行更多的控制,例如用户可以为相机应用提供相机访问权限,而不提供设备位置的访问权限。

检查应用的权限

如果应用需要危险权限,则每次执行需要该危险权限的操作时,都需要检查应用是否具有该权限,比如应用需要读取SD卡中的内容,那么每次执行读取操作时,都要检查是否有读取SD卡的权限,这是因为用户可能随时终止该应用的访问SD卡的权限。

ContextCompact.checkSelfPermission(Activity, Manifest.permission.READ_EXTERNAL_STORAGE):如果应用有该权限,则返回 PackageManager.PERMISSION_GRANTED;如果应用没有此权限,则返回 PackageManager.PERMISSION_DENIED,此时需要显式向用户请求权限。

请求权限

requestPermission(Activity activity, String [] permissions, int requestCode):
参数:
activity:
permissions:应用请求的权限
requesCode:识别此权限请求的请求码

应用调用requestPermission()时,系统向用户显式一个对话框,开发者无法更改此对话框。如果开发者想要为用户解释为什么请求该权限,则应该在调用requestPermission()前进行。

示例

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.READ_CONTACTS)) {

        // Show an expanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.

    } 

    // No explanation needed, we can request the permission.

    ActivityCompat.requestPermissions(thisActivity,
            new String[]{Manifest.permission.READ_CONTACTS},
            MY_PERMISSIONS_REQUEST_READ_CONTACTS);

    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
    // app-defined int constant. The callback method gets the
    // result of the request.

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值