Android的逻辑存储结构有三种

  • 内部存储结构 Internal Private Storage
  • 外部私有存储结构 External Private Storage
  • 外部公有存储结构 External Public Storage
    权限内容区别如下

    每次安装APP,最初开始的时候都有一系列的获取用户权限的按钮,包括地理位置,picture,movie等目录。
    Android要求获取公共权限时,必须先要经过用户的批准,下面是user-premission的过程

1、在AndroidManifest.xml中添加user-permission

外部存储的写的权限(可写意味着可读可写,如果想要只读,在这里更改)

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2、弹出获取权限的请求

定义一个按钮,当用户点击这个按钮的时候,弹出来系统获取用户权限允许的请求。
自行定义这个,很普通的一个按钮控件

            <Buttonandroid:id="@+id/btn_request_permission"android:layout_width="match_parent"android:layout_height="40dp"android:layout_marginTop="10dp"android:text="@string/request_storage_permission"android:textAllCaps="false" />

3、在activity中对按钮进行监听,处理事务

  1. 找到按钮 permissionBtn
  2. 对该按钮进行监听
  3. 监听内部点击事件OnClick
    首先,我们需要检测是否已经获取了用户权限

checkSelfPermission()源代码如下,其实我们只需要知道两个参数是什么就行了。参数一:上下文环境,一般传入的参数为currActivity.this;参数二:被验证的权限,之前在AndroidManifest中声明的权限相对应

    public static int checkSelfPermission(@NonNull Context context, @NonNull String permission) {if (permission == null) {throw new IllegalArgumentException("permission is null");} else {return context.checkPermission(permission, Process.myPid(), Process.myUid());}}

如果上述验证成功,那么没有必要再进行用户权限获取,否则进行如下操作,requestPermissions(),三个参数。
第一个参数上下文关系;
第二个参数String数组的permission,意味着可以传入多个permission请求
第三个参数请求码,可以自行定义一个数字,将在之后用到

ActivityCompat.requestPermissions(activity, String[], int requestcode)

我的代码中的部分

ActivityCompat.requestPermissions(DebugActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_CODE_STORAGE_PERMISSION);

到这里,我们点击了这个按钮permissionBtn,那么系统就会弹出一个权限框,这个框中的一系列内容就是我们申请的permission内容,自行联想一下我们刚进入app的时候弹出来很多层权限申请,这里我们只演示一个。
我们可以点击允许或者拒绝,在英文中就是GRANT、DENY
用户点击的信息需要进行交互。
重写onRequestPermissionsResult,这就是对用户交互信息的处理的函数。

    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

参数一:之前requestPermissions中传入的第三个参数对应,起到定位的作用
参数二:申请的permission
参数三:用户交互返回的结果
我的代码

    @Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,@NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (permissions.length == 0 || grantResults.length == 0) {return;}if (requestCode == REQUEST_CODE_STORAGE_PERMISSION) {//            for(int i=0;i<permissions.length;i++){//                String permisson = permissions[i];
//                int grantResult = grantResults[i];
//                Log.d("RequestPermission", permisson + ": " + grantResult);
//            }int state = grantResults[0];if (state == PackageManager.PERMISSION_GRANTED) {Toast.makeText(DebugActivity.this, "permission granted",Toast.LENGTH_SHORT).show();} else if (state == PackageManager.PERMISSION_DENIED) {Toast.makeText(DebugActivity.this, "permission denied",Toast.LENGTH_SHORT).show();}}}

Android开发——本地存储、用户权限获取相关推荐

  1. android 获取wifi的ip地址吗,Android开发实现在Wifi下获取本地IP地址的方法

    本文实例讲述了Android开发实现在Wifi下获取本地IP地址的方法.分享给大家供大家参考,具体如下: 代码核心介绍: WifiManager类提供了对设备Wifi功能的管理,包括Wifi开关的打开 ...

  2. Android开发本地音乐获取专辑封面图片

    某项目中需要用到音乐功能,只有音乐还是有一些单调,于是乎想跟音乐播放器一样展示专辑图片,查阅了部分大佬们的代码,总结代码如下: import android.content.ContentResolv ...

  3. Android开发本地及网络Mp3音乐播放器(十二)创建NetMusicListAdapter、SearchResult显示网络音乐列表

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51290181 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 实现功能: 实现NetM ...

  4. Android开发本地及网络Mp3音乐播放器(十三)网络音乐搜索功能实现,歌名歌手专辑名搜索

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51298411 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 实现功能: 实现网络音乐 ...

  5. 专题开发十二:JEECG微云快速开发平台-基础用户权限

      专题开发十二:JEECG微云快速开发平台-基础用户权限 11.3.4自定义按钮权限 Jeecg中,目前按钮权限设置,是通过对平台自己封装的按钮标签(<t:dgFunOpt等)进行设置.而在开 ...

  6. 开发指南专题十一:JEECG微云快速开发平台--基础用户权限

     开发指南专题十一:JEECG微云快速开发平台--基础用户权限    11.1. 权限设计 基本概念 权限管理模块涉及到的实体有:用户.角色和系统资源(包括系统菜单.页面按钮等).用户可以拥有多个 ...

  7. Android开发本地及网络Mp3音乐播放器(二十)歌曲下载完成后通知主界面更新本地音乐

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51448597 项目源码(打赏5积分请点这边):http://download.csdn ...

  8. 专题开发十二:JEECG微云高速开发平台-基础用户权限

      专题开发十二:JEECG微云高速开发平台-基础用户权限 11.3.4自己定义button权限 Jeecg中.眼下button权限设置,是通过对平台自己封装的button标签(<t:dgFun ...

  9. Android开发之 permission动态权限获取

    权限查看:戳这里 在文章最后附上DEMO DEMO效果: 一.说明: 1.支持单个权限.多个权限.单个权限组.多个权限组请求 2.不指定权限则自动获取清单文件上的危险权限进行申请 3.如果动态申请的权 ...

最新文章

  1. 16. 3Sum Closest
  2. NYOJ题目1048破门锁
  3. 深入理解SQL Server 2005 中的 COLUMNS_UPDATED函数
  4. 数码管时钟程序C语言00到99,[单片机]ACT89C51数码管时钟程序
  5. python实现数字形式转换
  6. .so文件反编译_java加密防止反编译-VirboxProtector
  7. 微软允许员工永久在家办公,远程办公时代真的要来临了吗?
  8. 《linux c编程指南》学习手记1
  9. 浙大 PAT b1040
  10. 20169219 使用Metaspoit攻击MS08-067实验报告
  11. Bootstrap 按钮
  12. 好的技术不一定能给你带来财富,但是好的工具一定可以让你创造财富
  13. 虚拟机vmware vmnet8 未识别(转)
  14. 写一个程序,打印数字1到100,3的倍数打印“Fizz”来替换这个数,5的倍数打印“Buzz”,对于既是3的倍数又是5的倍数的数字打印“FizzBuzz”...
  15. AlphaGo围棋 论文笔记
  16. 华为Push最新版接入(Mac)
  17. 小程序嵌套H5的方式和技巧
  18. 【禁用U盘】电脑windows7/10注册表、组策略禁用优盘;
  19. Php 实现在文档只读功能,如何将只读文档变成可编辑模式?
  20. networkx笔记

热门文章

  1. 怎样用计算机添加标题,如何在excel图表中添加标题 如何更改Excel图表中标题的字体...
  2. 简评骑士与凯尔特人交易对双方影响
  3. Android 10.0 导航栏增加虚拟按键 点击控制下拉状态栏展开和收缩
  4. Unity进行桌面截图并上传到服务器记录
  5. 【亲测】三星Galaxy SCH-I959 电信版S4刷机教程
  6. typedef的作用和用法(给结构体,函数指针,数组取别名)
  7. html5水滴动画,HTML5 TweenMax.js 水珠滴落动画
  8. 从根上理解高性能、高并发(六):通俗易懂,高性能服务器到底是如何实现的
  9. 动态规划——游艇租赁问题
  10. echarts map3d,geo3D以及加柱状图