问题描述
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();
}
}