permissions{
exclude "android.permission.QUERY_ALL_PACKAGES"
}
manifestContent = manifestContent.replace('<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>', '')
<queries>
<package android:name="com.facebook.katana" />
<package android:name="com.tencent.mm" />
<package android:name="com.tencent.mobileqq" />
<package android:name="com.twitter.android" />
<package android:name="com.tencent.mm" />
<package android:name="com.baidu.BaiduMap" />
<package android:name="com.autonavi.minimap" />
<package android:name="com.google.android.apps.maps" />
<package android:name="com.tencent.map" />
</queries>
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();
}
}
};
本文探讨了在Android应用中管理权限的方法,包括排除特定权限、动态请求权限及使用RxPermissions库简化权限处理流程。文章提供了代码示例,展示了如何在用户拒绝权限后进行合理提示,确保应用正常运行。
1787

被折叠的 条评论
为什么被折叠?



