1、方法一
private static final int PERMISSION_REQUEST_CODE = 1; private String[]
mPermissions = {Manifest.permission.CAMERA}; /** * 申请权限结果返回处理 */ @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[]
permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.i("lgq","onRequestPermissionsResult ....."+requestCode); if (requestCode ==
PERMISSION_REQUEST_CODE) { boolean isAllGranted = true; for (int grant :
grantResults) { // 判断是否所有的权限都已经授予了 Log.i("lgq","申请权限结果===="+grant); if (grant
!= PackageManager.PERMISSION_GRANTED) { isAllGranted = false; break; } } if
(isAllGranted) { // 所有的权限都授予了 // startCamera(); Log.i("lgq","同样同意kaiqil
..onRequestPermissionsResult..."); } else {// 提示需要权限的原因 Log.i("lgq","同样反对kaiqil
..onRequestPermissionsResult..."); AlertDialog.Builder builder = new
AlertDialog.Builder(this); builder.setMessage("拍照需要允许权限, 是否再次开启?反对")
.setTitle("提示") .setPositiveButton("确认", new DialogInterface.OnClickListener()
{ @Override public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(MainActivity.this, mPermissions,
PERMISSION_REQUEST_CODE); } }) .setNegativeButton("取消", new
DialogInterface.OnClickListener() { @Override public void
onClick(DialogInterface dialog, int which) { dialog.dismiss(); finish(); } });
builder.create().show(); } } }
 

当第一次点击禁止时:

 

2、方法二

1、添加依赖
//RxPermission权限申请 implementation
'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar' //RxBinding
implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
2、申请权限,处理申请结果
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission
android:name="android.permission.CAMERA"/> /** * 所有需要的权限类型 */ private static
final String[] PERMISSIONS = {Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}; /** *
动态获取权限 */ public void getPermission() { RxPermissions rxPermissions = new
RxPermissions(MainActivity.this);
rxPermissions.request(PERMISSIONS).subscribe(new Consumer<Boolean>() {
@Override public void accept(Boolean granted) throws Exception { if(granted){
//权限申请成功 Toast.makeText(MainActivity.this,"cg",Toast.LENGTH_SHORT).show();
}else{ //权限申请不成功,弹窗提示退出
Toast.makeText(MainActivity.this,"cg222",Toast.LENGTH_SHORT).show(); } } }); }
 

 进阶方法:
implementation 'com.yanzhenjie:permission:1.1.2' public void
checkPermission(){ //先判断是否有相机权限 AndPermission.with(this) .requestCode(100)
.permission(Permission.CAMERA) .callback(listener)
.rationale(mRationaleListener) .start(); }
//用户拒绝一次权限后,再次申请时检测到已经申请过一次该权限了,允许开发者弹窗说明申请权限的目的,获取用户的同意后再申请权限,避免用户勾选不再提示,导致不能再次申请权限
private RationaleListener mRationaleListener = new RationaleListener() {
@Override public void showRequestPermissionRationale(int requestCode, final
Rationale rationale) { if(100==requestCode){ Log.i("lgq","拒绝了。。。"); } } };
//相机权限监听 PermissionListener listener = new PermissionListener() { @Override
public void onSucceed(int requestCode, @NonNull List<String> grantPermissions)
{ if(100==requestCode){//打开摄像头 Log.i("lgq","同意了了。。。"); } } @Override public
void onFailed(int requestCode, @NonNull List<String> deniedPermissions) {
if(100==requestCode){//相机 AndPermission.defaultSettingDialog(MainActivity.this,
100) .setTitle("权限申请失败") .setMessage("需相机基本权限,否则您将无法正常使用,请在设置中授权")
.setPositiveButton("好,去设置") .setNegativeButton("", new
DialogInterface.OnClickListener() { @Override public void
onClick(DialogInterface dialog, int which) { return; } }) .show(); } } };
 

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信