权限
最近在写的App 在7.0 的时候需要获取一些危险权限(关于危险权限可以看:https://developer.android.google.cn/guide/topics/security/permissions.html#normal-dangerous)
刚开始写的时候是一个一个的获取,开始觉得没有什么,但是到后期获取的权限多了,就感觉有点麻烦了,并且特别烦人。所以找找看有没有比较简单的做法,后来在模拟器上发现了他们的通讯录,添加完联系人后提示获取权限的一个对话框,
所以就想能不能也这样做,后来发现可以然后就简单记录一下,看代码:
/**
* Created by stevefat on 2017/2/27.
*/
public class BaseActivity extends AppCompatActivity {
private List<String> needPermission;
private final int REQUEST_CODE_PERMISSION = 0;
private String[] permissionArray = new String[]{
Manifest.permission.READ_CONTACTS,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.SEND_SMS,
Manifest.permission.CAMERA,
Manifest.permission.RECORD_AUDIO,
Manifest.permission.ACCESS_COARSE_LOCATION
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void askMultiplePermission() {
needPermission = new ArrayList<>();
for (String permissionName :
permissionArray) {
if (!PermissionHelper.checkIsAskPermission(this, permissionName)) {
needPermission.add(permissionName);
}
}
if (needPermission.size() > 0) {
//开始申请权限
ActivityCompat.requestPermissions(this, needPermission.toArray(new String[needPermission.size()]), REQUEST_CODE_PERMISSION);
} else {
//获取数据
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
// super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case REQUEST_CODE_PERMISSION:
Map<String, Integer> permissionMap = new HashMap<>();
for (String name :
needPermission) {
permissionMap.put(name, PackageManager.PERMISSION_GRANTED);
}
for (int i = 0; i < permissions.length; i++) {
permissionMap.put(permissions[i], grantResults[i]);
}
if (checkIsAskPermissionState(permissionMap, permissions)) {
//获取数据
} else {
//提示权限获取不完成,可能有的功能不能使用
}
break;
}
}
public boolean checkIsAskPermission(Context context, String permission) {
if (ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
} else {
return true;
}
}
public boolean checkIsAskPermissionState(Map<String, Integer> maps, String[] list) {
for (int i = 0; i < list.length; i++) {
if (maps.get(list[i]) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
}
以上为简单代码记录,可以在继续封装一下。
参考:
1. http://www.jianshu.com/p/01123400c881
2. https://developer.android.google.cn/guide/topics/security/permissions.html#normal-dangerous
3. https://www.google.com.hk