Android 6.0后权限的申请

Android  2020年12月8日 pm6:51发布4年前 (2020)更新 91es.com站长
76 0 0

前言

Android 6.0 后,非系统应用权限获取收紧,应用需要动态的申请权限。

你除了AndroidManifest.xml中定义需要的权限,还需要在Java代码中再需要对应权限前提示用户授权

正文

第一步

AndroidManifest.xml

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
第二步
定义需要授权的权限
    //申请需要的所有权限
    private final String REQUEST_MANIFEST_PERMISSION[] = new String[]{
            Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE
    };

PS:REQUEST_MANIFEST_PERMISSION中定义的需要跟AndroidManifest.xml配对,要不然无法申请到权限。

申请权限授权
    public void requestPerssion(Activity activity, int permission_request_code) {
        if (null == activity) {
            Log.d(TAG, "requestPerssion null : ");
            return;
        }
        // Android 6.0后非系统应用需要申请权限
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            ActivityCompat.requestPermissions(activity, REQUEST_MANIFEST_PERMISSION, permission_request_code);
        }

        return;
    }
重写权限状态的回调
    /**
     * @param requestCode  请求时的request code
     * @param permissions  返回的权限的数组
     * @param grantResults 返回对应权限申请状态的数组[-1 申请失败,0申请成功]
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case PERMISSION_REQUEST_CODE:
                if (grantResults != null && permissions != null) {
                    for (int i = 0; i < grantResults.length; i++) {
                        Log.d(TAG, "grantResults[" + i + "]:" + grantResults[i]);
                        Log.d(TAG, "permissions[" + i + "]:" + permissions[i]);
                    }
                }
                break;
        }
    }

权限申请成功状态

    /**
     * Permission check result: this is returned by {@link #checkPermission}
     * if the permission has been granted to the given package.
     */
    public static final int PERMISSION_GRANTED = 0;

    /**
     * Permission check result: this is returned by {@link #checkPermission}
     * if the permission has not been granted to the given package.
     */
    public static final int PERMISSION_DENIED = -1;

参考文章

  1. Android RuntimePermissions运行时权限:批量权限申请

 历史上的今天

  1. 2023: startService()源码分析(0条评论)
  2. 2022: Android多窗口模式简单记录(0条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

林清玄:幸福的无关

我小时候对汽水有一种特别奇妙的向往,原因不在汽水有什么好喝,而是由于喝不到汽水。我们家是有几十口人的大家族,小孩依序排行就有18个之多,记忆里东西仿佛永远不够吃,更别说喝汽水了。喝汽水的时机有三种,一种是喜庆宴会,一种是过年的年夜饭,一种是庙会节庆。即使有汽水,也总是不够喝。到要喝汽水时好像进行一...

startActivity源码分析1

前言简单记录一下startActivity()源码的启动过程,主要是过一下流程,细节太多顾不上。下面以Launcher界面启动(startActivity())未启动过的应用为例。这部分主要涉及,启动新的Activity前,系统会让当前Activity[叫Launcher吧]进入onPaus...

余秀华:一潭水

这是我喜欢的时刻:黄昏深了一些,夜色尚浅我的灵魂如此清澈,在树叶上滚动一灯一影,我如此赤裸裸地活着,影子可以更长些留一部分供养阴影 的确有水从四面八方涌来,向四面八方散去我在水里小幅度地摇摆把一些词语光亮的部分挑在草尖上我喜欢被诗句围困,再呕心沥血找一条出路 ...

龙应台:明白

十岁的时候,我们的妈妈五十岁。我们是怎么谈她们的?我和家萱在一个浴足馆按摩,并排懒坐,有一句每一句地闲聊。一面落地大窗,外面看不进来,我们却可以把过路的人看个清楚。这是上海,这是衡山路。每一个亚洲城市都曾经有过这么一条路——餐厅特别时髦,酒吧特别昂贵,时装店冷气极强,灯光特别亮,墙上的海报一定有...

【摘】Android:获取内部存储信息方法总结

前言Android开发中,需要获取磁盘的大小信息。项目中也有获取磁盘信息的方法,但只有一种,因此摘抄了网上的 《Android : 获取内部存储信息方法总结》正文方法一private long getSDCardAvailSize() { String state = Envir...

[摘]repo命令参考手册

前言本文是摘抄的,主要是需要一些repo的使用。记录一下,方便自己查阅。正文repo用法的基本形式为:repo <COMMAND> <OPTIONS>可选项在[]中表示,例如许多命令接收一个项目列表作为参数,你可以通过一组名字或者p本地源目录的path来指定项目...