一個(gè)權(quán)限申請(qǐng)管理類烟号,可自動(dòng)獲取所需權(quán)限政恍,支持其它應(yīng)用迫筑,需要root設(shè)備支持脯燃。
主要功能如下:
支持運(yùn)行時(shí)權(quán)限申請(qǐng)辕棚,包括存儲(chǔ)欲主,相機(jī)等。
支持高級(jí)權(quán)限申請(qǐng)引几,包括懸浮窗伟桅,修改設(shè)置楣铁,查看應(yīng)用使用情況以及截屏等盖腕。
支持激活設(shè)備管理器
支持開啟無障礙
支持激活設(shè)備所有者
支持修改系統(tǒng)安全設(shè)置和修改系統(tǒng)全局設(shè)置
判斷某個(gè)應(yīng)用的某項(xiàng)權(quán)限是否已獲取
可得知權(quán)限申請(qǐng)是否成功
/**
* 主線程異步請(qǐng)求權(quán)限
*/
private void requestPermissions() {
final ProgressDialog mDialog = new ProgressDialog(this);
mDialog.setMessage("正在請(qǐng)求權(quán)限...");
mDialog.setCanceledOnTouchOutside(false);
mDialog.setCancelable(false);
mDialog.show();
new PermissionManager(this)
//組建一個(gè)任務(wù)
.buildTask(new PermissionManager.Task()
.setPackageName(getPackageName())
//允許運(yùn)行時(shí)權(quán)限
.allow(
Manifest.permission.CAMERA,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
//允許懸浮窗
.allowDrawOverlays(true)
//允許修改系統(tǒng)設(shè)置
.allowWriteSettings(true)
//允許投射屏幕
.allowProjectMedia(true)
//允許有權(quán)查看使用情況
.allowUsageStats(true)
//允許無障礙服務(wù)
.allowAccessibility(MyAccessibilityService.class, true)
//允許設(shè)備管理器
.allowDeviceAdmin(MyDeviceAdminReceiver.class, true)
)
//開啟GPS服務(wù)
.putSecure(Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "+gps")
//開啟wifi
.putGlobal(Settings.Global.WIFI_ON, 1)
//回調(diào)竖哩,用于接收?qǐng)?zhí)行結(jié)果, handler要放在主線程
.setCallbacks(new PermissionManager.Callbacks() {
@Override
public void onSuccess(List<PermissionManager.Task> tasks, PermissionManager.Sets sets, boolean isAllSuccessful) {
if (mDialog != null) mDialog.cancel();
Toast.makeText(MainActivity.this, "命令執(zhí)行完成", Toast.LENGTH_SHORT).show();
PermissionManager.Task task = tasks.get(0);
Log.e(TAG, "isAllSuccessful: " + isAllSuccessful + "\n"
+ "isSuccessful: " + task.isSuccessful() + "\n"
+ "isAllowPermissionSuccessful: " + task.isAllowPermissionSuccessful() + "\n"
+ "isAllowOpSuccessful: " + task.isAllowOpSuccessful() + "\n"
+ "isAccessibilitySuccessful: " + task.isAccessibilitySuccessful() + "\n"
+ "isDeviceAdminSuccessful: " + task.isDeviceAdminSuccessful() + "\n"
);
if (sets.getSecureSetResult().get(Settings.Secure.LOCATION_PROVIDERS_ALLOWED) == Boolean.TRUE) {
Log.e(TAG, "open gps success");
} else {
Log.e(TAG, "open gps failure");
}
if (sets.getGlobalSetResult().get(Settings.Global.WIFI_ON) == Boolean.TRUE) {
Log.e(TAG, "open wifi success");
} else {
Log.e(TAG, "open wifi failure");
}
}
@Override
public void onFailure(List<PermissionManager.Task> tasks, PermissionManager.Sets sets) {
if (mDialog != null) mDialog.cancel();
Toast.makeText(MainActivity.this, "命令執(zhí)行失敗增淹,設(shè)備可能沒有root權(quán)限", Toast.LENGTH_SHORT).show();
}
}, new Handler())
.start();
}
/**
* 同步請(qǐng)求權(quán)限
*/
private void syncRequestPermissions() {
final PermissionManager pm = new PermissionManager(this);
//同步執(zhí)行可能會(huì)影響ui虑润,建議放在子線程執(zhí)行
PermissionManager.Result result = pm.buildTask(new PermissionManager.Task()
.setPackageName(getPackageName())
//允許運(yùn)行時(shí)權(quán)限
.allow(
Manifest.permission.CAMERA,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
//允許懸浮窗
.allowDrawOverlays(true)
).execute();
//執(zhí)行結(jié)果
if (result.isExecuteSuccess()) {
PermissionManager.Task task = result.getTasks().get(0);
Log.e(TAG, "isAllSuccessful: " + result.isAllSuccessful() + "\n"
+ "isSuccessful: " + task.isSuccessful() + "\n"
+ "isAllowPermissionSuccessful: " + task.isAllowPermissionSuccessful() + "\n"
+ "isAllowOpSuccessful: " + task.isAllowOpSuccessful() + "\n"
);
//Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show();
} else {
Log.e(TAG, "命令執(zhí)行失敗哭当,設(shè)備可能沒有root權(quán)限");
}
}
github地址:https://github.com/yuanfang235/app