打开当前应用的授权页面
1.背景介绍
Android6.0(API23)以后, 一个很显著的变化,就是都需要我们获取权限不再像以前那么简单, 只需要在AndroidManifest.xml文件中配置即可,而是多了一个动态权限的概念。 像读写SD卡、发送短信等权限都划分为了敏感权限,系统会自动检测到,并给用户提示选择。有时候, 如果用户拒绝了我们的权限, APP的某些功能可能就无法实现了。这个时候, 引导用户去设置权限就很重要。
2.代码实现
以下是在实战中所使用的代码, 提供参考:
public static void showDialog(final Context context) {
//TODO 首先检查是否有权限, 有权限直接读写, 没有权限 拉起权限
//有权限 跳过拉起设置权限步骤
//没有权限 走以下步骤
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("友情提示");
builder.setMessage("您目前还没有给游戏 在手机上写数据的权限, 可能会导致游戏数据丢失, 建议开启该权限");
builder.setPositiveButton("去开启", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
simpleSetting(context);
}
}).
setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
AlertDialog dialog = builder.show();
dialog.setCanceledOnTouchOutside(false);
}
public static void simpleSetting(Context context) {
Intent intent = new Intent();
try{
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Log.e("HLQ_Struggle", "******************当前手机型号为:" + getMobileType());
// 将用户引导到系统设置页面
if (Build.VERSION.SDK_INT >= 9) {
Log.e("HLQ_Struggle", "APPLICATION_DETAILS_SETTINGS");
intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
intent.setData(Uri.fromParts("package", context.getPackageName(), null));
} else if (Build.VERSION.SDK_INT <= 8) {
intent.setAction(Intent.ACTION_VIEW);
intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
intent.putExtra("com.android.settings.ApplicationPkgName", context.getPackageName());
}
context.startActivity(intent);
} catch (Exception e) {//抛出异常就直接打开设置页面
Log.e("HLQ_Struggle", e.getLocalizedMessage());
intent = new Intent(Settings.ACTION_SETTINGS);
context.startActivity(intent);
}
}