1、添加依赖

dependencies {implementation 'pub.devrel:easypermissions:3.0.0'
}

2、在AndroidManifest文件中添加需要的权限

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

3、复写onRequestPermissionsResult方法

@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);// 将返回结果转给EasyPermissionsEasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);}

4、检查权限

String[] perms = {Manifest.permission.READ_EXTERNAL_STORAGE};if (EasyPermissions.hasPermissions(this, perms)) {// 已获取权限// ...} else {// 没有权限,现在去获取// ...}

5、申请权限

public static final int RC_READ_EXTERNAL_STORAGE = 1; // requestCode
EasyPermissions.requestPermissions(this, "申请内存权限",RC_READ_EXTERNAL_STORAGE, perms);

6、实现EasyPermissions.PermissionCallbacks接口,处理申请结果

@Overridepublic void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {// 一些权限被授予Toast.makeText(this, "允许", Toast.LENGTH_SHORT).show();}@Overridepublic void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {// 一些权限被禁止Toast.makeText(this, "禁止", Toast.LENGTH_SHORT).show();}
}

7、如果用户点击了拒绝,并勾选了不再询问

@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {new AppSettingsDialog.Builder(this).build().show();//弹出个对话框 可以自定义
}

8、完整的Activity活动如下


import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;import net.sourceforge.pinyin4j.PinyinHelper;import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.PrimitiveIterator;import pub.devrel.easypermissions.AppSettingsDialog;
import pub.devrel.easypermissions.EasyPermissions;public class MainActivity2 extends AppCompatActivity implements EasyPermissions.PermissionCallbacks{private TextView ta;private ImageView ig;int REQUEST_IMAGE_OPEN = 2;@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);// 将返回结果转给EasyPermissionsEasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);}@Overridepublic void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {// 一些权限被授予Toast.makeText(this, "允许", Toast.LENGTH_SHORT).show();}@Overridepublic void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {// 一些权限被禁止Toast.makeText(this, "禁止", Toast.LENGTH_SHORT).show();if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {new AppSettingsDialog.Builder(this).build().show();//弹出个对话框 可以自定义}}public static final int RC_READ_EXTERNAL_STORAGE = 1; // requestCode@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);ta = (TextView) findViewById(R.id.ta);ig = (ImageView) findViewById(R.id.ig);String[] perms = {Manifest.permission.READ_EXTERNAL_STORAGE};if (EasyPermissions.hasPermissions(this, perms)) {// 已获取权限// ...Toast.makeText(this, "已获取权限", Toast.LENGTH_SHORT).show();} else {// 没有权限,现在去获取// ...Toast.makeText(this, " 没有权限,现在去获取", Toast.LENGTH_SHORT).show();EasyPermissions.requestPermissions(this, "申请内存权限",RC_READ_EXTERNAL_STORAGE, perms);}ta.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//打开相册Intent intent = new  Intent(Intent.ACTION_PICK);//指定获取的是图片intent.setType("image/*");startActivityForResult(intent, REQUEST_IMAGE_OPEN);}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);//将选择的图片显示if(requestCode == REQUEST_IMAGE_OPEN && resultCode == Activity.RESULT_OK &&data !=null){Uri uris;uris = data.getData();Bitmap bitmap = null;//Uri转化为Bitmaptry {bitmap = getBitmapFromUri(uris);} catch (FileNotFoundException e) {e.printStackTrace();}ig.setImageBitmap(bitmap);}}//Uri转化为Bitmapprivate Bitmap getBitmapFromUri(Uri uri) throws FileNotFoundException {Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));return bitmap;}}

Android权限申请库——EasyPermissions使用详解和打开相册方法相关推荐

  1. 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 最简单用法 | 一行代码搞定权限申请 | 推荐用法 )

    文章目录 一.添加依赖 二.在 AndroidManifest.xml 中配置权限 三.权限申请最简单用法 四.推荐使用的用法 五.GitHub 地址 上一篇博客 [Android 应用开发]Goog ...

  2. 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 完整代码示例 | 申请权限 | 申请权限原理对话框 | 引导用户手动设置权限对话框 )

    文章目录 一.申请权限 二.申请权限原理对话框 三.引导用户手动设置权限对话框 四.在 AndroidManifest.xml 中配置权限 五.完整代码示例 六.GitHub 地址 一.申请权限 申请 ...

  3. 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 简介 | 权限申请处理细节 | 添加依赖 | 界面权限申请结果处理 | 权限申请结果回调接口 )

    文章目录 一.EasyPermissions 简介 二.EasyPermissions 权限申请处理细节 三.添加 EasyPermissions 依赖 四.权限申请结果处理 方法 onRequest ...

  4. 深入理解Android(一):Gradle详解

    http://www.infoq.com/cn/articles/android-in-depth-gradle/ http://www.infoq.com/cn/articles/android-i ...

  5. Android集成百度定位以及导航详解

    Android集成百度定位以及导航详解                    百度地图Android SDK 官方下载地址:                            包括类参考.示例代码 ...

  6. 【Linux开发】Linux下jpeglib库的安装详解

    Linux下jpeglib库的安装详解 首先要下载所需的库压缩包:jpegsrc.v6b.tar.gz或 jpegsrc.v8b.tar.gz 然后将下载的压缩包随便放在和解压到你喜欢的地方. # t ...

  7. android权限申请Permission

    代码地址如下: http://www.demodashi.com/demo/12432.html android在6.0系统以后,权限申请变得麻烦起来,今天介绍一个超级好用的权限申请库,我在使用中经过 ...

  8. Android  Doze and App Standby模式详解

    Android  Doze and App Standby模式详解 来源:腾云阁 https://www.qcloud.com/community Optimizing for Doze and Ap ...

  9. Android四大组件Service之AIDL详解

    Android四大组件Service之AIDL详解 前言 简介 基础知识 AIDL 服务端 定义AIDL文件规则 创建 .aidl 文件 清单注册 通过 IPC 传递对象 调用 IPC 方法 Andr ...

最新文章

  1. 2021年大数据HBase(十一):Apache Phoenix的视图操作
  2. jupyter notebook配置
  3. python的顶级高手_Python+深度学习
  4. Java/Android中实现Shell命令
  5. 点击预览,有时可以打开,有时不可以
  6. 看新排美国话剧《哗变》
  7. 【深度学习系列】——神经网络的可视化解释
  8. 记录最近待学习的内容
  9. ubuntu16.04装机7:安装VScode
  10. Python解压zip和rar文件
  11. 双线性函数的紧凑超平面散列(Compact Hyperplane Hashing with Bilinear Functions)阅读笔记
  12. Ps(Adobephoto shop)当中布尔运算的使用方法
  13. MatLab msgbox用法
  14. 关于iphone开发前期环境搭建过程中需要注意的一些要点
  15. java 代码阅读工具_java-tracer
  16. 对于分布式集群,应该思考什么问题?
  17. 供应链金融生态系统全解读,在不同的行业都有哪些模式?
  18. Android6.0运行时权限(危险权限列表)
  19. 计算机软件优化,如何优化计算机软件系统
  20. 如何查看pytorch、cuda版本

热门文章

  1. 归并排序(图解配代码)
  2. eclipse如何修改工作空间名称
  3. 如何让自己变得更加成熟
  4. 三星android10手势,三星全面屏手势终于来了!看着有点熟悉
  5. Linux操作系统 第六章
  6. 最简单的迁徙图实现demo
  7. bzoj 2876: [Noi2012]骑行川藏 拉格朗日数乘
  8. 逆置线性表(线性表)
  9. Java和C、C++比较
  10. 【American English】美式发音,英语发音,美国音音标列表及发音