Android的逻辑存储结构有三种

  • 内部存储结构 Internal Private Storage
  • 外部私有存储结构 External Private Storage
  • 外部公有存储结构 External Public Storage
    权限内容区别如下
    Android开发——本地存储、用户权限获取_第1张图片
    每次安装APP,最初开始的时候都有一系列的获取用户权限的按钮,包括地理位置,picture,movie等目录。
    Android要求获取公共权限时,必须先要经过用户的批准,下面是user-premission的过程

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

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

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

2、弹出获取权限的请求

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

            <Button                android: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
参数三:用户交互返回的结果
我的代码

    @Override    public 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//                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();            }        }    }

更多相关文章

  1. Android中应用程序如何获得系统签名权限
  2. Android 开发获取通知栏权限时会出现两个应用图标
  3. android中Activity传递参数之onActivityResult
  4. android多功能按钮二——基础编
  5. android/linux权限简单理解
  6. Android 6.0以上的权限申请的问题
  7. Android中常用的权限
  8. Android实现渐显按钮的左右滑动效果

随机推荐

  1. Eclipse 安装 Google Android(安卓)插件
  2. Android(安卓)Studio无法启动 打开, Andro
  3. Android(安卓)之 EditText属性用法介绍
  4. Android开发环境的搭建
  5. Suggestion: add 'tools:replace="androi
  6. Android(安卓)四大组件之Activity生命周
  7. Android项目从eclipse迁移到Android(安卓
  8. 基于 Android(安卓)NDK 的学习之旅-----
  9. IPC进程间通信
  10. Android播放器MediaPlayer与MediaRecorde