Android权限 权限等级 普通权限 敏感权限 申请权限
权限等级
Android权限分为两种,normal和dangerous。normal为普通权限,不需要程序动态申请,在Manifest中声明就可以。dangerous为敏感权限,需要程序动态申请。
普通 normal
QUERY_ALL_PACKAGES
public static final String QUERY_ALL_PACKAGES
Allows query of any normal app on the device, regardless of manifest declarations.Protection level: normalConstant Value: "android.permission.QUERY_ALL_PACKAGES"
敏感 dangerous
POST_NOTIFICATIONS
public static final String POST_NOTIFICATIONS
Allows an app to post notificationsProtection level: dangerousConstant Value: "android.permission.POST_NOTIFICATIONS"
位置权限
当应用请求 ACCESS_COARSE_LOCATION 权限或 ACCESS_FINE_LOCATION 权限时(如以下代码段所示),就是在声明需要获取前台位置信息:
<manifest ... ><!-- Always include this permission --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!-- Include only if your app benefits from precise location access. --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
权限
权限分为清单文件配置权限以及运行时权限。
- android 6.0之前,所有的权限在Manifest中声明就可以了。
- android 6.0之后,推出了运行时权限。首先,需要应用在Manifest中配置权限,其次,需要动态获取权限,弹出系统弹窗后,用户点击同意才会获取到权限。
运行时权限申请流程
- 检测应用是否已经拥有此权限。
- 如果应用已经具备此权限,不做特殊处理,如果没有拥有权限,则弹出系统弹窗申请权限。(用户拒绝两次系统弹窗之后便不会再弹窗了。)
- 根据用户对系统弹窗选择同意或者拒绝进行操作。
网络分类
网络权限
网络权限<uses-permission android:name="android.permission.INTERNET" />查看网络状态权限<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
有了查看网络状态权限之后,就可以获取网络信息了。
网络权限使用示例
NetworkInfo activeNetworkInfo = systemService.getActiveNetworkInfo();
需要ACCESS_NETWORK_STATE权限。
扩展
Android使用明文传输http需要的配置
如果使用http进行信息的传递,需要在manifest的application中进行以下说明:
android:usesCleartextTraffic="true"
<applicationandroid:usesCleartextTraffic="true"android:name=".JJApmApplication"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.JJAPMSDK">
实践
运行时权限申请实践
主程序如下:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {private String TAG = "JJStudy.callBack";private Button goAddressBook;private Button goPhotoLibrary;private String[] permission_SMS = {Manifest.permission.SEND_SMS,Manifest.permission.READ_SMS};private int permission_SMS_code = 10011;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();goAddressBook.setOnClickListener(this);goPhotoLibrary.setOnClickListener(this);}private void initView() {switchBtn = (Button) findViewById(R.id.switch_btn);goAddressBook = (Button) findViewById(R.id.goAddressBook);goPhotoLibrary = (Button) findViewById(R.id.goPhotoLibrary);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.goAddressBook:if (PermissionUtil.checkPermission(this,permission_SMS)){// 已授权Log.i(TAG,"已经收到授权!!!!");}else {// 未授权PermissionUtil.requestPermission(this,permission_SMS,permission_SMS_code);}break;case R.id.goPhotoLibrary:break;}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (requestCode == permission_SMS_code){if (PermissionUtil.checkGranted(grantResults)){// 授权成功Log.i(TAG,"granted after system pop...");}else {// 用户未授权Log.i(TAG,"not granted after system pop...");}}}
}
工具类如下,:
package com.hp.interfacecallback;import android.app.Activity;
import android.content.pm.PackageManager;import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;public class PermissionUtil {public static boolean checkPermission(Activity activity, String permission) {return checkPermission(activity, new String[]{permission});}public static boolean checkPermission(Activity activity, String[] permissions) {boolean result = true;int permissionGranted = PackageManager.PERMISSION_GRANTED;for (int i = 0; i < permissions.length; i++) {permissionGranted = ContextCompat.checkSelfPermission(activity, permissions[i]);/*** 检测所有申请的权限是否都已经授权,没有跳出循环*/if (permissionGranted == PackageManager.PERMISSION_DENIED) {result = false;break;}}return result;}public static void requestPermission(Activity activity, String[] permissions,int requestCode){ActivityCompat.requestPermissions(activity,permissions,requestCode);}public static boolean checkGranted(int[] grantResults) {if (null == grantResults || grantResults.length == 0){return true;}boolean granted = true;for (int i = 0; i < grantResults.length; i++) {if (grantResults[i] == PackageManager.PERMISSION_DENIED){granted = false;break;}}return granted;}
}
Android权限 权限等级 普通权限 敏感权限 申请权限相关推荐
- 【Android 应用开发】动态权限管理示例 ( 使用原生代码实现 | 申请权限 | 判定权限申请结果 | 判定 “ 不再询问 “ 情况 )
文章目录 一.申请权限 二.判定权限申请结果 三.判定 " 不再询问 " 情况 四.完整代码示例 1.权限管理代码 2.主界面代码 3.执行结果 五.博客资源 一.申请权限 首先 ...
- android插件做动态权限,Mui本地打包笔记(四)Android自定义插件的配置(以动态申请权限为例)...
通过自定义插件方式实现Android平台的动态申请权限功能 在上一章中完成了在Mui中调用Android原生的动态权限请求功能(Android动态申请权限的问题).虽然说完成了功能,但是在使用上并不是 ...
- Android踩坑小记:在onResume中申请权限
这里写自定义目录标题 背景:不停弹出的Toast 定位过程 根本原因(转自下面相关链接) 后续优化 相关链接 背景:不停弹出的Toast 我们在某个页面的onResume中进行了权限的判断和申请,在权 ...
- Android踩坑日记:android7.0动态相机权限
前提: 项目中使用的动态权限开源库github:https://github.com/yanzhenjie/AndPermission. 转载必须注明本文转自严振杰的博客:http://blog.cs ...
- Android PermissionUtils:运行时权限工具类及申请权限的正确姿势
Android PermissionUtils:运行时权限工具类及申请权限的正确姿势 ifadai 关注 2017.06.16 16:22* 字数 318 阅读 3637评论 1喜欢 6 Permis ...
- Android 申请权限结果返回处理
1.方法一 private static final int PERMISSION_REQUEST_CODE = 1;private String[] mPermissions = {Manifest ...
- android申请多个运行时权限,Android 6.0(API 23) 运行时权限(二)之权限申请
Android M 在上一篇中简单介绍了运行时权限,今天就讲讲怎么去申请权限.这个项目中本来用了一个第三方的权限框架,但是不太好用,我就在github上选择了start最多的PermissionsDi ...
- 一个Android动态权限的流式权限管理库EasyPermission,帮你申请动态权限
转载请注明出处https://blog.csdn.net/yeluofengchui/article/details/91126117 已经出2.0版本了,使用更方便,详情见EasyPermissio ...
- android 强制打开gps定位_Android 6.0动态权限及跳转GPS设置界面的方法
1.动态权限申请 模糊的位置信息android.permission.ACCESS_COARSE_LOCATION权限为例 在AndroidManifest文件中加入权限 然后java代码中动态申请 ...
最新文章
- Visual Studio Plugins
- java多线程操作同一资源
- 1.x到2.x的迁移:可观察与可观察:RxJava FAQ
- 手机充电器5V=1A和5V=2A的区别是什么?能通用吗?
- docker on marathonmesos示例
- AWS 开战 MongoDB!
- pytorch 入门学习多分类问题-9
- noip模拟赛 寻宝之后
- css3 HTML5 效果
- javabean 是什么?
- 表格闪退怎么解决_excel2010表格打开闪退怎么回事
- Springboot专利申请服务平台 毕业设计-附源码260839
- 【第二周】吴恩达团队AI for Medical Diagnosis大作业
- web文件管理系统_实用开源项目,基于Web的文件管理系统——DocSys
- vos3000配置与通讯测试(一)
- 红米k30pro开发者选项
- 在线翻译PDF文件用什么方法
- 大学计算机案例教程旧照片修复,破损旧照片修复教程
- Linux命名空间cgroups简介
- Linux搭建tor网络环境