安卓6.0权限使用

本文介绍了安卓6.0的权限机制,包括Normal和Dangerous两类权限,并详细阐述了如何自己申请权限的步骤,如在AndroidManifest配置、检查与申请权限、权限解释以及处理回调。同时提到了使用第三方开源库EasyPermissions辅助管理权限。

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

很久没写过博客了,今天有空写一下.

安卓6.0的权限机制分为两类

Normal Permissions.
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS  
android.permission.ACCESS_NETWORK_STATE  
android.permission.ACCESS_NOTIFICATION_POLICY  
android.permission.ACCESS_WIFI_STATE  
android.permission.ACCESS_WIMAX_STATE  
android.permission.BLUETOOTH  
android.permission.BLUETOOTH_ADMIN  
android.permission.BROADCAST_STICKY  
android.permission.CHANGE_NETWORK_STATE  
android.permission.CHANGE_WIFI_MULTICAST_STATE  
android.permission.CHANGE_WIFI_STATE  
android.permission.CHANGE_WIMAX_STATE  
android.permission.DISABLE_KEYGUARD  
android.permission.EXPAND_STATUS_BAR  
android.permission.FLASHLIGHT  
android.permission.GET_ACCOUNTS  
android.permission.GET_PACKAGE_SIZE  
android.permission.INTERNET  
android.permission.KILL_BACKGROUND_PROCESSES  
android.permission.MODIFY_AUDIO_SETTINGS  
android.permission.NFC  
android.permission.READ_SYNC_SETTINGS  
android.permission.READ_SYNC_STATS  
android.permission.RECEIVE_BOOT_COMPLETED  
android.permission.REORDER_TASKS  
android.permission.REQUEST_INSTALL_PACKAGES  
android.permission.SET_TIME_ZONE  
android.permission.SET_WALLPAPER  
android.permission.SET_WALLPAPER_HINTS  
android.permission.SUBSCRIBED_FEEDS_READ  
android.permission.TRANSMIT_IR  
android.permission.USE_FINGERPRINT  
android.permission.VIBRATE  
android.permission.WAKE_LOCK  
android.permission.WRITE_SYNC_SETTINGS  
com.android.alarm.permission.SET_ALARM  
com.android.launcher.permission.INSTALL_SHORTCUT  
com.android.launcher.permission.UNINSTALL_SHORTCUT  
Dangerous Permissions
group:android.permission-group.CONTACTS  
  permission:android.permission.WRITE_CONTACTS  
  permission:android.permission.GET_ACCOUNTS      
  permission:android.permission.READ_CONTACTS  

group:android.permission-group.PHONE  
  permission:android.permission.READ_CALL_LOG  
  permission:android.permission.READ_PHONE_STATE   
  permission:android.permission.CALL_PHONE  
  permission:android.permission.WRITE_CALL_LOG  
  permission:android.permission.USE_SIP  
  permission:android.permission.PROCESS_OUTGOING_CALLS  
  permission:com.android.voicemail.permission.ADD_VOICEMAIL  

group:android.permission-group.CALENDAR  
  permission:android.permission.READ_CALENDAR  
  permission:android.permission.WRITE_CALENDAR  

group:android.permission-group.CAMERA  
  permission:android.permission.CAMERA  

group:android.permission-group.SENSORS  
  permission:android.permission.BODY_SENSORS  

group:android.permission-group.LOCATION  
  permission:android.permission.ACCESS_FINE_LOCATION  
  permission:android.permission.ACCESS_COARSE_LOCATION  

group:android.permission-group.STORAGE  
  permission:android.permission.READ_EXTERNAL_STORAGE  
  permission:android.permission.WRITE_EXTERNAL_STORAGE  

group:android.permission-group.MICROPHONE  
  permission:android.permission.RECORD_AUDIO  

group:android.permission-group.SMS  
  permission:android.permission.READ_SMS  
  permission:android.permission.RECEIVE_WAP_PUSH  
  permission:android.permission.RECEIVE_MMS  
  permission:android.permission.RECEIVE_SMS  
  permission:android.permission.SEND_SMS  
  permission:android.permission.READ_CELL_BROADCASTS  

一、自己申请权限

1.在AndroidManifest里面配置需要的权限,无论是普通的还是特殊的权限都需要在这里配置。
2.检查权限,如果没有权限则申请
3.给用户申请权限的解释,这个方法只会在第一次用户拒绝授权,再次去申请这个的权限时会用到
4.申请相应的权限
5.处理申请权限的回调,在这里获得哪些授权成功哪些失败,处理需要的逻辑

二、使用第三方开源库

EasyPermissions

compile 'pub.devrel:easypermissions:0.1.5'  
public class BaseActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks{
 //--------------------------------------权限封装-------------------------------------------

    private Map<Integer, PermissionCallback> mPermissonCallbacks;
    /**
     * 权限回调接口
     */
    protected interface PermissionCallback {
        /**
         * 成功获取权限
         */
        void hasPermission();

    }

    /**
     * 请求权限操作
     * @param rationale 请求权限提示语
     * @param permissionRequestCode 权限requestCode
     * @param perms 申请的权限列表
     * @param callback 权限结果回调
     */
    protected void performCodeWithPermission(@NonNull String rationale,
                                             final int permissionRequestCode, @NonNull String[] perms, @NonNull PermissionCallback callback) {
        if (EasyPermissions.hasPermissions(this, perms)) {
            callback.hasPermission();
        } else {
            if(mPermissonCallbacks == null){
                mPermissonCallbacks = new HashMap<>();
            }
            mPermissonCallbacks.put(permissionRequestCode, callback);
            EasyPermissions.requestPermissions(this, rationale, permissionRequestCode, perms);
        }
    }

    /**
     * 跳转设置弹框 建议在权限被设置为不在询问时弹出 提示用户前往设置页面打开权限
     * @param tips 提示信息
     */
    protected void alertAppSetPermission(String tips) {
        new AppSettingsDialog.Builder(this, tips)
                               .setTitle(getString(R.string.permission_deny_again_title))
                .setPositiveButton(getString(R.string.permission_deny_again_positive))
                .setNegativeButton(getString(R.string.permission_deny_again_nagative), null)
                .build()
                .show();
    }
    /**
     * 跳转设置弹框 建议在权限被设置为不在询问时弹出 提示用户前往设置页面打开权限
     * @param tips 提示信息
     * @param requestCode 页面返回时onActivityResult的requestCode
     */
    protected void alertAppSetPermission(String tips, int requestCode) {
        new AppSettingsDialog.Builder(this, tips)
                .setTitle(getString(R.string.permission_deny_again_title))
                .setPositiveButton(getString(R.string.permission_deny_again_positive))
                .setNegativeButton(getString(R.string.permission_deny_again_nagative), null)
                .setRequestCode(requestCode)
                .build()
                .show();
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        //这里会回调onPermissionsGranted 和 onPermissionsDenied
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
    }

    @Override
    public void onPermissionsGranted(int requestCode, List<String> perms) {
        PermissionCallback callback = mPermissonCallbacks.get(requestCode);
        if(callback != null) {
            callback.hasPermission();
        }
    }
    @Override
    public void onPermissionsDenied(int requestCode, List<String> perms) {
        PermissionCallback callback = mPermissonCallbacks.get(requestCode);
        if(callback != null) {
            if(EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
                alertAppSetPermission(getString(R.string.permission_tips), REQUEST_APPSET);
            } else {
                //普通取消(不授权也非不再询问)  ,不做任何提示
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值