安卓6.0以后很多权限需要手动确认开启权限,虽然自己写起来也是很快
但是这里推荐一个框架及可以更加迅速的开启权限
1.gradle一句话引用
compile 'com.yanzhenjie:permission:1.0.5'
2.申请权限
AndPermission.with(this) .requestCode(100) .permission(Manifest.permission.WRITE_CONTACT) .send();
可在permission里面添加多个权限并且任然需要在AndroidManifest.xml添加权限
3.回调方法
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { // 只需要调用这一句,第一个参数是当前Acitivity/Fragment,回调方法写在当前Activity/Framgent。 AndPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults); } // 成功回调的方法,用注解即可,里面的数字是请求时的requestCode。 @PermissionYes(100) private void getLocationYes(List<String> grantedPermissions) { // TODO 申请权限成功。 } // 失败回调的方法,用注解即可,里面的数字是请求时的requestCode。 @PermissionNo(100) private void getLocationNo(List<String> deniedPermissions) { // 用户否勾选了不再提示并且拒绝了权限,那么提示用户到设置中授权。 if (AndPermission.hasAlwaysDeniedPermission(this, deniedPermissions)) { // 第一种:用默认的提示语。 AndPermission.defaultSettingDialog(this, REQUEST_CODE_SETTING).show(); } }可直接去github查看https://github.com/yanzhenjie/AndPermission关于沉浸式状态栏(一般写在你的baseactivity中)
//控制状态栏颜色
compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
private SystemBarTintManager tintManager; /** * 初始化沉浸式 */ private void initStateBar() { setColorId(); if (isNeedLoadStatusBar()) { loadStateBar(); } } private void loadStateBar() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { setTranslucentStatus(true); } tintManager = new SystemBarTintManager(this); // 激活状态栏设置 tintManager.setStatusBarTintEnabled(true); // 激活导航栏设置 tintManager.setNavigationBarTintEnabled(true); // 设置一个状态栏颜色 tintManager.setStatusBarTintResource(getColorId()); } @TargetApi(19) private void setTranslucentStatus(boolean on) { Window win = getWindow(); WindowManager.LayoutParams winParams = win.getAttributes(); final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; if (on) { winParams.flags |= bits; } else { winParams.flags &= ~bits; } win.setAttributes(winParams); } /** * 如果子类使用非默认的StatusBar,就重写此方法,传入布局的id */ protected int mColorId=R.color.color9; protected void setColorId() { this.mColorId=R.color.color9;//子类重写方式 } protected int getColorId() { return mColorId; }