123*_*567 3 permissions android
Android 6.0中的Android运行时权限(API级别23)最佳做法
我已成功将运行时间的权限添加到我的应用程序中
这些参考
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;
}
}
Run Code Online (Sandbox Code Playgroud)
android提供的最佳实践
http://developer.android.com/training/permissions/best-practices.html
声明以下内容
1)考虑使用意图
2)只询问你需要的权限
3)不要压倒用户
4)解释为什么你需要权限
现在,按照上述内容,我们仅在需要时询问权限,并仅针对该活动所需的特定权限
然而,这些最佳实践并未说明许可的频率,即说明需要显示这些权限的次数,还是只能显示一次
现在我面临的问题是
1)每次在应用程序中调用活动时,弹出权限,这些都发生在应用程序使用的特定会话中(如果在同一会话期间调用相同的活动,则在授予权限后不会调用该权限)
2)我们是否可以存储已授予的权限(即以共享首选项执行第一次检查的静态变量,以便不再一次调用权限)
3)每次使用应用程序时,是否需要调用权限访问权限
4)如果不允许共享首选项,我们如何更优雅地管理这些权限
1)您引用的文档说:
如果您的应用需要危险权限,则每次执行需要该权限的操作时,都必须检查是否拥有该权限.用户总是可以自由撤销权限,因此即使应用程序昨天使用了相机,也不能认为它今天仍然具有该权限.
这就是你必须每次都要求它的原因.
2)您无法存储权限.Android决定记住授予权限的时间.
3)是的,这就是上面引用的内容.
4)你让Android管理权限.除了检查或在需要时请求它们,您自己不做任何事情.
| 归档时间: |
|
| 查看次数: |
1299 次 |
| 最近记录: |