权限等级

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>

权限

权限分为清单文件配置权限以及运行时权限。

  1. android 6.0之前,所有的权限在Manifest中声明就可以了。
  2. android 6.0之后,推出了运行时权限。首先,需要应用在Manifest中配置权限,其次,需要动态获取权限,弹出系统弹窗后,用户点击同意才会获取到权限。

运行时权限申请流程

  1. 检测应用是否已经拥有此权限。
  2. 如果应用已经具备此权限,不做特殊处理,如果没有拥有权限,则弹出系统弹窗申请权限。(用户拒绝两次系统弹窗之后便不会再弹窗了。)
  3. 根据用户对系统弹窗选择同意或者拒绝进行操作。

网络分类

网络权限

 网络权限<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权限 权限等级 普通权限 敏感权限 申请权限相关推荐

  1. 【Android 应用开发】动态权限管理示例 ( 使用原生代码实现 | 申请权限 | 判定权限申请结果 | 判定 “ 不再询问 “ 情况 )

    文章目录 一.申请权限 二.判定权限申请结果 三.判定 " 不再询问 " 情况 四.完整代码示例 1.权限管理代码 2.主界面代码 3.执行结果 五.博客资源 一.申请权限 首先 ...

  2. android插件做动态权限,Mui本地打包笔记(四)Android自定义插件的配置(以动态申请权限为例)...

    通过自定义插件方式实现Android平台的动态申请权限功能 在上一章中完成了在Mui中调用Android原生的动态权限请求功能(Android动态申请权限的问题).虽然说完成了功能,但是在使用上并不是 ...

  3. Android踩坑小记:在onResume中申请权限

    这里写自定义目录标题 背景:不停弹出的Toast 定位过程 根本原因(转自下面相关链接) 后续优化 相关链接 背景:不停弹出的Toast 我们在某个页面的onResume中进行了权限的判断和申请,在权 ...

  4. Android踩坑日记:android7.0动态相机权限

    前提: 项目中使用的动态权限开源库github:https://github.com/yanzhenjie/AndPermission. 转载必须注明本文转自严振杰的博客:http://blog.cs ...

  5. Android PermissionUtils:运行时权限工具类及申请权限的正确姿势

    Android PermissionUtils:运行时权限工具类及申请权限的正确姿势 ifadai 关注 2017.06.16 16:22* 字数 318 阅读 3637评论 1喜欢 6 Permis ...

  6. Android 申请权限结果返回处理

    1.方法一 private static final int PERMISSION_REQUEST_CODE = 1;private String[] mPermissions = {Manifest ...

  7. android申请多个运行时权限,Android 6.0(API 23) 运行时权限(二)之权限申请

    Android M 在上一篇中简单介绍了运行时权限,今天就讲讲怎么去申请权限.这个项目中本来用了一个第三方的权限框架,但是不太好用,我就在github上选择了start最多的PermissionsDi ...

  8. 一个Android动态权限的流式权限管理库EasyPermission,帮你申请动态权限

    转载请注明出处https://blog.csdn.net/yeluofengchui/article/details/91126117 已经出2.0版本了,使用更方便,详情见EasyPermissio ...

  9. android 强制打开gps定位_Android 6.0动态权限及跳转GPS设置界面的方法

    1.动态权限申请 模糊的位置信息android.permission.ACCESS_COARSE_LOCATION权限为例 在AndroidManifest文件中加入权限 然后java代码中动态申请 ...

最新文章

  1. Visual Studio Plugins
  2. java多线程操作同一资源
  3. 1.x到2.x的迁移:可观察与可观察:RxJava FAQ
  4. 手机充电器5V=1A和5V=2A的区别是什么?能通用吗?
  5. docker on marathonmesos示例
  6. AWS 开战 MongoDB!
  7. pytorch 入门学习多分类问题-9
  8. noip模拟赛 寻宝之后
  9. css3 HTML5 效果
  10. javabean 是什么?
  11. 表格闪退怎么解决_excel2010表格打开闪退怎么回事
  12. Springboot专利申请服务平台 毕业设计-附源码260839
  13. 【第二周】吴恩达团队AI for Medical Diagnosis大作业
  14. web文件管理系统_实用开源项目,基于Web的文件管理系统——DocSys
  15. vos3000配置与通讯测试(一)
  16. 红米k30pro开发者选项
  17. 在线翻译PDF文件用什么方法
  18. 大学计算机案例教程旧照片修复,破损旧照片修复教程
  19. Linux命名空间cgroups简介
  20. Linux搭建tor网络环境

热门文章

  1. LeetCode-1264. 页面推荐(中等)
  2. JSP概述和页面技术
  3. C#开发语音程序入门之文字朗读
  4. 元宇宙 - 圈里的百科
  5. 洛谷 P2708 硬币翻转 题解
  6. SVG/CSS路径动画
  7. 树莓派安装配置MFRC522模块
  8. NOIP-2014-J2-T3
  9. android 多个按钮居中,Android手机开发 使用线性布局和相对布局实现Button垂直水平居中...
  10. 大数据-大数据学习过程