第二章:Android Studio (用户权限)

Android Studio 在应用使用的过程中,各种操作需要权限的申请
本文纯菜鸟记录,目录:

  • 一、静态权限
  • 二、动态权限
  • 三、常用权限

在这里插入图片描述

前言

  • 权限有分静态和动态,静态权限需要在Manifest.xml中声明,动态权限不仅需要在Manifest.xml中声明,还需要在用户软件运行时弹出窗口给用户选择是否同意权限。
  • 动态权限是在版本6.0之后才提出的,所以在申请动态权限时都应该先判断一下系统版本。

一、静态权限

静态权限在Manifest.xml中<aplication前填写就行

<!--使用网络权限-->
<uses-permission android:name="android.permission.INTERNET" />
<!--读取手机信息权限,6.09.0还需要动态申请-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--SD读写权限,6.09.0还需要动态申请-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--相机权限,6.0以上还需要动态申请-->
<uses-permission android:name="android.permission.CAMERA" /

<application
	...
</application>

二、动态权限

  • 步骤1、 前面说过,动态权限需要先在Manifest.xml中申请,后才动态申请,接下来要动态申请的权限在前面静态示例中声明过了。
  • 步骤2、 调用申请权限方法前,先判断一下版本,是否是Android 6.0以上
  • 步骤3、 使用判断是否已经拥有某权限,已拥有就可以跳过某权限申请
  • 步骤4、 是否被用户拒绝,且提示永不提醒,此情景下,当用户再次使用相关功能时,引导用户到系统设置权限页手动开启权限。还有个方法卸载重装。
  • 步骤5、 应该在每个需要权限都加上权限判断,避免在有些情况下,原先确认过的权限被修改,可能会导致罪恶的奔溃。。。

代码示例:

//第一次开启程序动态申请权限
private void GetPromission(){
	//判断版本,(当前版本 >= 23) ,即大于6.0
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        List<String> plist = new ArrayList<>();
        plist = GetPromissionList();
        if (!plist.isEmpty()) {
            String[] ps = plist.toArray(new String[plist.size()]);
            ActivityCompat.requestPermissions(MainActivity.this, ps, 1);

        } else {
        	//如果权限已经全部申请,也可以分开判断单个权限,
        	//获取设备唯一标识符
            String DeviceId = ((TelephonyManager) getSystemService(MainActivity.this.TELEPHONY_SERVICE)).getDeviceId();
            tvlog.append("\r\nDeviceId:" + DeviceId);
        }
    }else{
    	//如果设备版本低于6.0,则可自接获取设备唯一标识符
        String DeviceId = ((TelephonyManager) getSystemService(MainActivity.this.TELEPHONY_SERVICE)).getDeviceId();
        tvlog.append("\r\nDeviceId:" + DeviceId);
    }
}

//判断需要的权限,将未获取的权限集合成列表返回
private List<String> GetPromissionList(){
    List<String> plist = new ArrayList<>();
    if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){
        plist.add(Manifest.permission.CAMERA);
    }
    if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
        plist.add(Manifest.permission.READ_EXTERNAL_STORAGE);
    }
    if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        plist.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
    }
    if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
        plist.add(Manifest.permission.READ_PHONE_STATE);
    }
    return plist;
}

三、常用权限

静态权限申请格式都是如这样:

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

动态权限格式都是如这样:

Manifest.permission.READ_PHONE_STATE

新添加就是替换掉permission.后的权限名就行。
危险权限共有分为9组,24个权限,后面版本会一直更新
官网权限最新完整列表

以下是早期的危险权限组资料,即需要动态申请的,一组中申请其中一个权限,就可以获得整组的所有权限了,几乎可以当做只有9个权限,前面读写SD卡权限只要其中一个即可以了,而且事实上也只会出现一次请求界面。

  • 权限组:权限名
    CALENDAR
  • READ_CALENDAR
  • WRITE_CALENDAR
    CAMERA
  • CAMERA
    CONTACTS
  • READ_CONTACTS
  • WRITE_CONTACTS
  • GET_ACCOUNTS
    LOCATION
  • ACCESS_FINE_LOCATION
  • ACCESS_COARSE_LOCATION
    MICROPHONE
    RECORD_AUDIO
    PHONE
  • READ_PHONE_STATE
  • CALL_PHONE
  • READ_CALL_LOG
  • WRITE_CALL_LOG
  • ADD_VOICEMAIL
  • USE_SIP
  • PROCESS_OUTGOING_CALLS
    SENSORS
  • BODY_SENSORS
    SMS
  • SEND_SMS
  • RECEIVE_SMS
  • READ_SMS
  • RECEIVE_WAP_PUSH
  • RECEIVE_MMS
    STORAGE
  • READ_EXTERNAL_STORAGE
  • WRITE_EXTERNAL_STORAGE

常用。。。

<!--读取手机信息权限,6.09.0还需要动态申请-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<!-- 访问读、写sd卡关联目录权限 6.0-9.0需要动态申请,10.0后取消 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<!-- 相机权限 需要动态申请-->
<uses-permission android:name="android.permission.CAMERA" />

<!-- 振动需要的权限 -->
<uses-permission android:name="android.permission.VIBRATE" />

<!-- 网络权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

牢骚。。。
其实大多数权限,就是个摆设,因为用户根本不知道那些权限同意了会有什么隐患,用户只知道,同意了那些xxx权限才能正常使用要用的软件,即使不知道哪里下载来的应用,也照样下载,同意,运行。。。
所以说,权限这东西根本就是鸡肋中的鸡肋。。。只是对那些人来说是个脱干系的“好东西”。。。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值