Android版本大于M时动态申请权限的方法
问题描述
Android应用开发时,若版本大于M,则有些权限需要在运行时用Java代码进行动态获取。
解决方案
添加supportv7包
在build.gradle(:app)文件dependencies节点中,添加v7包的依赖:
implementation 'com.android.support:appcompat-v7:28.0.0'
分支处理
在应用初始化时,判断sdk版本,进行分支处理:
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M){startInit();}else {mCheckPermission(); //集中进行权限的申请}
获取权限主要代码
集中获取权限:
// 获取权限
public void mCheckPermission(){ArrayList<String> plist = new ArrayList<>();try {int per = ActivityCompat.checkSelfPermission(Login.this, "android.permission.WRITE_EXTERNAL_STORAGE");if(per != PackageManager.PERMISSION_GRANTED){plist.add("android.permission.WRITE_EXTERNAL_STORAGE");plist.add("android.permission.READ_EXTERNAL_STORAGE");}int per2 = ActivityCompat.checkSelfPermission(Login.this, "android.permission.CAMERA");if(per2 != PackageManager.PERMISSION_GRANTED){plist.add("android.permission.CAMERA");}int per3 = ActivityCompat.checkSelfPermission(Login.this, "android.permission.ACCESS_FINE_LOCATION");if(per3 != PackageManager.PERMISSION_GRANTED){plist.add("android.permission.ACCESS_FINE_LOCATION");plist.add("android.permission.ACCESS_COARSE_LOCATION");}if(plist.size()>0){ActivityCompat.requestPermissions(Login.this, plist.toArray(new String[plist.size()]), 9999);}else{startInit();}}catch (Exception e){e.printStackTrace();}
}//回调处理
@Override
public void onRequestPermissionsResult(final int requestCode, @NonNull String[] permissions,@NonNull int[] grantResults){boolean isall = true;for(int i=0; i<grantResults.length; i++){if(grantResults[i]==-1){isall = false;}}if(isall){startInit();}else{new AlertDialog.Builder(Login.this, AlertDialog.THEME_HOLO_LIGHT).setTitle("权限获取提示").setMessage("请允许所有权限后,使用本系统!").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {finish();}}).show();}}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
