Android6.0网络权限管理
来源:互联网 发布:windows xp wifi支持 编辑:程序博客网 时间:2024/06/05 14:14
Android 6.0 Marshmallow(棉花糖)是目前谷歌公布的最新版本的操作系统,其中一项改进是针对程序调用权限控制又进一步升级。
在之前的Android系统中,用户在安装应用时会收到一堆权限申请,比如允许应用访问相册、位置、通讯录等等。但是用户一般都会忽视这些直接全盘接受安装。
到了Android 5.0时代,用户可以在设置选项中对每个授权许可进行开启/关闭,比如你不希望你的短信应用获取你的地理信息,那么你可以在新设置页面中关闭这一选项。
用户处理权限后回调activity中的onRequestPermissionResult方法
在之前的Android系统中,用户在安装应用时会收到一堆权限申请,比如允许应用访问相册、位置、通讯录等等。但是用户一般都会忽视这些直接全盘接受安装。
到了Android 5.0时代,用户可以在设置选项中对每个授权许可进行开启/关闭,比如你不希望你的短信应用获取你的地理信息,那么你可以在新设置页面中关闭这一选项。
而在Android 6.0 Marshmallow中,用户在安装应用时并不需要受到这些提示的骚扰,只有在首次打开、使用过程中实际用到哪些权限才会向收到申请授权的提醒。这一点和现在的iOS非常相像。而且开发者还可以自定义网络权限提示框。
先判断是否已经授权permissionlist,在没有授权的里面检查被用户勾选不再提醒的权限permissionNeed
final private int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 124; private void insertDummyContactWrapper() { List<String> permissionsNeeded = new ArrayList<String>(); final List<String> permissionsList = new ArrayList<String>(); if (!addPermission(permissionsList, Manifest.permission.ACCESS_FINE_LOCATION)) permissionsNeeded.add("GPS"); if (!addPermission(permissionsList, Manifest.permission.READ_CONTACTS)) permissionsNeeded.add("Read Contacts"); if (!addPermission(permissionsList, Manifest.permission.WRITE_CONTACTS)) permissionsNeeded.add("Write Contacts"); if (permissionsList.size() > 0) { if (permissionsNeeded.size() > 0) { // Need Rationale String message = "You need to grant access to " + permissionsNeeded.get(0); for (int i = 1; i < permissionsNeeded.size(); i++) message = message + ", " + permissionsNeeded.get(i); showMessageOKCancel(message, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { requestPermissions(permissionsList.toArray(new String[permissionsList.size()]), REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS); } }); return; } requestPermissions(permissionsList.toArray(new String[permissionsList.size()]), REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS); return; } insertDummyContact();} private boolean addPermission(List<String> permissionsList, String permission) { if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) { permissionsList.add(permission); // Check for Rationale Option if (!shouldShowRequestPermissionRationale(permission)) return false; } return true;}
用户处理权限后回调activity中的onRequestPermissionResult方法
@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS: { Map<String, Integer> perms = new HashMap<String, Integer>(); // Initial perms.put(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED); perms.put(Manifest.permission.READ_CONTACTS, PackageManager.PERMISSION_GRANTED); perms.put(Manifest.permission.WRITE_CONTACTS, PackageManager.PERMISSION_GRANTED); // Fill with results for (int i = 0; i < permissions.length; i++) perms.put(permissions[i], grantResults[i]); // Check for ACCESS_FINE_LOCATION if (perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && perms.get(Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED && perms.get(Manifest.permission.WRITE_CONTACTS) == PackageManager.PERMISSION_GRANTED) { // All Permissions Granted insertDummyContact(); } else { // Permission Denied Toast.makeText(MainActivity.this, "Some Permission is Denied", Toast.LENGTH_SHORT) .show(); } } break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); }}
0 1
- Android6.0网络权限管理
- Android6.0权限管理
- android6.0 权限管理
- android6.0权限管理
- Android6.0权限管理
- Android6.0权限管理
- Android6.0权限管理
- Android6.0权限管理
- Android6.0 权限管理
- Android6.0------权限管理
- Android6.0权限管理-PermissionsDispatcher
- Android6.0权限管理-PermissionsDispatcher
- android6.0的权限管理
- Android6.0权限管理和申请
- Android6.0权限管理被忽略问题
- 关于Android6.0权限管理 动态注册
- Android6.0权限管理完全解析
- Android6.0新特性:权限管理
- iOS-UI-自定义View-基础示例
- sql中order by与索引排序的区别
- latched之First Missing Positive
- DEVC中的for编译出错问题解决办法
- setVisibility(View.GONE)无效的解决方案
- Android6.0网络权限管理
- json中头疼的null
- 嵌入式linux截图工具gsnap。。。。
- hdu-1055----树染色问题color a tree(贪心)
- error C2146: 语法错误: 缺少“;”(在标识符“m_sockReceive”的前面)
- Recover Binary Search Tree
- POJ-2105
- OC中NSLog函数输出格式详解
- 浅析mongodb主从库的配置