Android 6.0(API级别23)中的Android运行时权限最佳实践
我已经成功地在我的应用程序中使用运行时权限添加了权限
这些参考资料
http://developer.android.com/training/permissions/requesting.html
和
https://www.learn2crack.com/2015/10/android-marshmallow-permissions.html
这是我使用的代码
private static final int PERMISSION_REQUEST_CODE = 1;
switch (id){
case R.id.check_permission:
if (checkPermission()) {
Snackbar.make(view,"Permission already granted.",Snackbar.LENGTH_LONG).show();
} else {
Snackbar.make(view,"Please request permission.",Snackbar.LENGTH_LONG).show();
}
break;
case R.id.request_permission:
if (!checkPermission()) {
requestPermission();
} else {
Snackbar.make(view,"Permission already granted.",Snackbar.LENGTH_LONG).show();
}
break;
}
private boolean checkPermission(){
int result = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION);
if (result == PackageManager.PERMISSION_GRANTED){
return true;
} else {
return false;
}
}
private void requestPermission(){
if (ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.ACCESS_FINE_LOCATION)){
Toast.makeText(context,"GPS permission allows us to access location data. Please allow in App Settings for additional functionality.",Toast.LENGTH_LONG).show();
} else {
ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},PERMISSION_REQUEST_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case PERMISSION_REQUEST_CODE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Snackbar.make(view,"Permission Granted, Now you can access location data.",Snackbar.LENGTH_LONG).show();
} else {
Snackbar.make(view,"Permission Denied, You cannot access location data.",Snackbar.LENGTH_LONG).show();
}
break;
}
}
安卓提供的最佳实践
http://developer.android.com/training/permissions/best-practices.html
陈述以下内容:
1)考虑使用Intent
2)只请求所需的权限
3)不要让用户感到不堪重负
4)解释为什么需要权限
现在根据上述要求,我们仅在需要时请求特定活动所需的权限
然而这些最佳实践并未说明权限的频率,即这些权限需要显示多少次或者是否只能显示一次
现在我面临的问题是:
1)每次在应用中调用该活动时,都会弹出权限,这仅发生在该应用程序使用的同一会话期间(如果在同一会话期间调用了相同的活动,则授权后不再调用权限)
2)我们可以存储已授权的权限(即执行第一个检查的静态变量在共享首选项中,以便不再反复调用权限)
3)每次使用应用程序时,我们需要调用权限访问吗
4)如果不允许共享首选项,我们如何更优雅地管理这些权限