问题描述
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() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.show();
}
}
本文介绍了在Android应用开发中,当版本大于M时如何进行运行时权限的动态获取。首先,需要在build.gradle文件中添加supportv7包依赖。然后,在应用初始化时判断SDK版本,针对不同版本进行权限申请的分支处理。主要代码展示了如何集中获取WRITE_EXTERNAL_STORAGE、CAMERA和ACCESS_FINE_LOCATION等权限,并在用户授权后启动初始化操作,如果用户未授权所有权限则展示提示对话框并结束应用。
609

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



