Android 需要动态申请的权限以及EasyPermission 的使用

追加:https://www.jianshu.com/p/c1219d1d2401

使用RXpermission申请动态权限更好用~~

 

Android6.0(API 23)以后,一些涉及敏感数据的权限申请需要动态申请了,不能直接在menifest添加就可以用了。

一、需要动态申请的权限

引用:http://blog.csdn.net/htwhtw123/article/details/76032997

所属权限组权限
日历READ_CALENDAR
日历WRITE_CALENDAR
相机CAMERA
联系人READ_CONTACTS
联系人WRITE_CONTACTS
联系人GET_ACCOUNTS
位置ACCESS_FINE_LOCATION
位置ACCESS_COARSE_LOCATION
麦克风RECORD_AUDIO
电话READ_PHONE_STATE
电话CALL_PHONE
电话READ_CALL_LOG
电话WRITE_CALL_LOG
电话ADD_VOICEMAIL
电话USE_SIP
电话PROCESS_OUTGOING_CALLS
传感器BODY_SENSORS
短信SEND_SMS
短信RECEIVE_SMS
短信READ_SMS
短信RECEIVE_WAP_PUSH
短信RECEIVE_MMS
存储READ_EXTERNAL_STORAGE
存储WRITE_EXTERNAL_STORAGE

二、不需要动态申请的权限

引用:https://blog.csdn.net/chen969097157/article/details/78047596

ACCESS_LOCATION_EXTRA_COMMANDS 定位权限

ACCESS_NETWORK_STATE 网络状态权限

ACCESS_NOTIFICATION_POLICY 通知 APP通知显示在状态栏

ACCESS_WIFI_STATE WiFi状态权限

BLUETOOTH 使用蓝牙权限

BLUETOOTH_ADMIN 控制蓝牙开关

BROADCAST_STICKY 粘性广播

CHANGE_NETWORK_STATE 改变网络状态

CHANGE_WIFI_MULTICAST_STATE 改变WiFi多播状态,应该是控制手机热点(猜测)

CHANGE_WIFI_STATE 控制WiFi开关,改变WiFi状态

DISABLE_KEYGUARD 改变键盘为不可用

EXPAND_STATUS_BAR 扩展bar的状态

GET_PACKAGE_SIZE 获取应用安装包大小

INTERNET 网络权限

KILL_BACKGROUND_PROCESSES 杀死后台进程

MODIFY_AUDIO_SETTINGS 改变音频输出设置

NFC 支付

READ_SYNC_SETTINGS 获取手机设置信息

READ_SYNC_STATS 数据统计

RECEIVE_BOOT_COMPLETED 监听启动广播

REORDER_TASKS 创建新栈

REQUEST_INSTALL_PACKAGES 安装应用程序

SET_TIME_ZONE 允许应用程序设置系统时间区域

SET_WALLPAPER 设置壁纸

SET_WALLPAPER_HINTS 设置壁纸上的提示信息,个性化语言

TRANSMIT_IR 红外发射

USE_FINGERPRINT 指纹识别

VIBRATE 震动

WAKE_LOCK 锁屏

WRITE_SYNC_SETTINGS 改变设置

SET_ALARM 设置警告提示

INSTALL_SHORTCUT 创建快捷方式

UNINSTALL_SHORTCUT 删除快捷方式

三、使用EasyPermission库进行权限动态申请

1、导入easypermission库:

 compile 'pub.devrel:easypermissions:1.0.1'

2、动态申请权限


//所要申请的权限
String[] permsLocation = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};

if (EasyPermissions.hasPermissions(this, permsLocation )) {
  //已经获取所要申请的权限,进行下一步处理
} else {
            
        //没有获取,申请定位权限
        EasyPermissions.requestPermissions(this,"请求获得设备定位权限", 1, permsLocation);
     } 
}

//Android 系统权限结果监听回调
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
     super.onRequestPermissionsResult(requestCode, permissions, grantResults);

     //调用easypermission结果监听返回
     EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}


//easypermission 权限结果监听回调
@Override
public void onPermissionsGranted(int requestCode, List<String> perms) {       
}

@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {
}

 //EasyPermissions.onRequestPermissionsResult 源码
 /**
     * Handle the result of a permission request, should be called from the calling {@link
     * Activity}'s {@link ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int,
     * String[], int[])} method.
     * <p>
     * If any permissions were granted or denied, the {@code object} will receive the appropriate
     * callbacks through {@link PermissionCallbacks} and methods annotated with {@link
     * AfterPermissionGranted} will be run if appropriate.
     *
     * @param requestCode  requestCode argument to permission result callback.
     * @param permissions  permissions argument to permission result callback.
     * @param grantResults grantResults argument to permission result callback.
     * @param receivers    an array of objects that have a method annotated with {@link
     *                     AfterPermissionGranted} or implement {@link PermissionCallbacks}.
     */
    public static void onRequestPermissionsResult(int requestCode,
                                                  @NonNull String[] permissions,
                                                  @NonNull int[] grantResults,
                                                  @NonNull Object... receivers) {
        // Make a collection of granted and denied permissions from the request.
        List<String> granted = new ArrayList<>();
        List<String> denied = new ArrayList<>();
        for (int i = 0; i < permissions.length; i++) {
            String perm = permissions[i];
            if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
                granted.add(perm);
            } else {
                denied.add(perm);
            }
        }

        // iterate through all receivers
        for (Object object : receivers) {
            // Report granted permissions, if any.
            if (!granted.isEmpty()) {
                if (object instanceof PermissionCallbacks) {
                    ((PermissionCallbacks) object).onPermissionsGranted(requestCode, granted);
                }
            }

            // Report denied permissions, if any.
            if (!denied.isEmpty()) {
                if (object instanceof PermissionCallbacks) {
                    ((PermissionCallbacks) object).onPermissionsDenied(requestCode, denied);
                }
            }

            // If 100% successful, call annotated methods
            if (!granted.isEmpty() && denied.isEmpty()) {
                runAnnotatedMethods(object, requestCode);
            }
        }
    }


四、使用RxPermissions库:

RxPermissions git链接

五、自定义权限申请工具类

6.0以上动态申请权限工具类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值