日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android代码判断权限,安卓权限检测代码

發布時間:2024/7/23 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android代码判断权限,安卓权限检测代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android 23 以后加入了新的權限檢查機制,對一些危險權限,進行了新的授權管理,以讓用戶明確app都是用了哪些權限,這也讓我們的開發多做了一些工作。

public class BaseActivity extends Activity {

protected static final int REQ_CODE_REQUEST_OPEN_PERMISSION = 0x9001;

// 危險權限的列表

private static Map sPermissionMap;

static {

sPermissionMap = new LinkedHashMap<>();

sPermissionMap.put(Manifest.permission.READ_PHONE_STATE, "讀取手機信息");

sPermissionMap.put(Manifest.permission.READ_CONTACTS, "讀取聯系人");

sPermissionMap.put(Manifest.permission.WRITE_EXTERNAL_STORAGE, "讀寫外部存儲空間");

sPermissionMap.put(Manifest.permission.CAMERA, "相機");

sPermissionMap.put(Manifest.permission.RECORD_AUDIO, "錄音");

sPermissionMap.put(Manifest.permission.ACCESS_FINE_LOCATION, "訪問位置");

}

// 檢測權限

protected void checkPermission() {

Observable.fromIterable(sPermissionMap.keySet()).filter(new Predicate() {

@Override

public boolean test(String permission) throws Exception {

return ActivityCompat.checkSelfPermission(BaseActivity.this, permission) != PackageManager.PERMISSION_GRANTED;

}

}).toList().subscribe(new Consumer>() {

@Override

public void accept(List permissions) throws Exception {

requestPermissions(permissions.toArray(new String[0]));

}

});

}

// 判斷是否需要顯示為什么要申請權限

private void shouldShowRequestPermissionRationale(final List permissions) {

Observable.fromIterable(permissions).filter(new Predicate() {

@Override

public boolean test(String permission) throws Exception {

return ActivityCompat.shouldShowRequestPermissionRationale(BaseActivity.this, permission);

}

}).toList().subscribe(new Consumer>() {

@Override

public void accept(final List showRequestPermissions) throws Exception {

if (showRequestPermissions.size() > 0) {

getPermissionRationale(showRequestPermissions).subscribe(new Consumer() {

@Override

public void accept(String permissionRationale) throws Exception {

showRequestPermissionRationaleDialog(permissions, permissionRationale);

}

});

} else {

/**

* // 下面的代碼可以強制用戶打開所有的權限。

* getPermissionRationale(permissions).subscribe(new Consumer() {

* @Override

* public void accept(String permissionRationale) throws Exception {

* showPermissionRefusedDialog(permissionRationale);

* }

* });

*/

onPermissionGranted();

}

}

});

}

// 獲取權限的提示

private Observable getPermissionRationale(List permissions) {

return Observable.fromIterable(permissions).toList().map(new Function, String>() {

@Override

public String apply(List permissions) throws Exception {

StringBuilder builder = new StringBuilder();

if (permissions != null && permissions.size() > 0) {

for (int i = 0; i < permissions.size(); i++) {

builder.append(sPermissionMap.get(permissions.get(i)));

if (i != permissions.size() - 1) {

builder.append(",");

}

}

}

return builder.toString();

}

});

}

// 顯示為什么要申請權限的對話框

private void showRequestPermissionRationaleDialog(final List permissions, String permissionRationale) {

// 顯示權限請求對話框

DialogUtils.showAlert(BaseActivity.this, "申請權限", "應用需要申請" + permissionRationale + "的權限", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

requestPermissions(permissions.toArray(new String[0]));

}

});

}

// 申請權限

private void requestPermissions(String[] permissions) {

if (permissions == null || permissions.length == 0) {

onPermissionGranted();

return;

}

ActivityCompat.requestPermissions(BaseActivity.this, permissions, Config.REQUEST_ASK_PERMISSIONS);

}

// 權限授權后

protected void onPermissionGranted() {

}

// 提供給子類檢查權限,如果沒有權限,提示用戶打開相應的權限。

@Override

public void checkPermissions(String... permissions) {

Observable.fromArray(permissions).filter(new Predicate() {

@Override

public boolean test(String permission) throws Exception {

return ActivityCompat.checkSelfPermission(BaseActivity.this, permission) != PackageManager.PERMISSION_GRANTED;

}

}).toList().subscribe(new Consumer>() {

@Override

public void accept(List notGrantPermissions) throws Exception {

getPermissionRationale(notGrantPermissions).subscribe(new Consumer() {

@Override

public void accept(String permissionRationale) throws Exception {

if (!TextUtils.isEmpty(permissionRationale)) {

showPermissionRefusedDialog(permissionRationale);

}

}

});

}

});

}

@Override

public void onRequestPermissionsResult(int requestCode, final String[] permissions, int[] grantResults) {

if (requestCode == Config.REQUEST_ASK_PERMISSIONS) {

if (grantResults == null || grantResults.length == 0) return;

List notGrantedPermissions = new ArrayList<>();

for (int i = 0; i < grantResults.length; i++) {

if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {

notGrantedPermissions.add(permissions[i]);

}

}

if (notGrantedPermissions.size() == 0) {

onPermissionGranted();

} else {

shouldShowRequestPermissionRationale(notGrantedPermissions);

}

}

}

// 顯示權限拒絕對話框

protected void showPermissionRefusedDialog(String permissionRationale) {

DialogUtils.showConfirm(this, "申請權限", "應用需要申請" + permissionRationale + "的權限,但已被拒絕,請手動設置。", getString(R.string.sure), new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

SystemCompat.startPermissionSettingActivityForResult(BaseActivity.this, REQ_CODE_REQUEST_OPEN_PERMISSION);

}

}, getString(R.string.cancel), null);

}

}

總結

以上是生活随笔為你收集整理的android代码判断权限,安卓权限检测代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。