Android权限申请库——EasyPermissions使用详解和打开相册方法
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使用详解和打开相册方法相关推荐
- 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 最简单用法 | 一行代码搞定权限申请 | 推荐用法 )
文章目录 一.添加依赖 二.在 AndroidManifest.xml 中配置权限 三.权限申请最简单用法 四.推荐使用的用法 五.GitHub 地址 上一篇博客 [Android 应用开发]Goog ...
- 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 完整代码示例 | 申请权限 | 申请权限原理对话框 | 引导用户手动设置权限对话框 )
文章目录 一.申请权限 二.申请权限原理对话框 三.引导用户手动设置权限对话框 四.在 AndroidManifest.xml 中配置权限 五.完整代码示例 六.GitHub 地址 一.申请权限 申请 ...
- 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 简介 | 权限申请处理细节 | 添加依赖 | 界面权限申请结果处理 | 权限申请结果回调接口 )
文章目录 一.EasyPermissions 简介 二.EasyPermissions 权限申请处理细节 三.添加 EasyPermissions 依赖 四.权限申请结果处理 方法 onRequest ...
- 深入理解Android(一):Gradle详解
http://www.infoq.com/cn/articles/android-in-depth-gradle/ http://www.infoq.com/cn/articles/android-i ...
- Android集成百度定位以及导航详解
Android集成百度定位以及导航详解 百度地图Android SDK 官方下载地址: 包括类参考.示例代码 ...
- 【Linux开发】Linux下jpeglib库的安装详解
Linux下jpeglib库的安装详解 首先要下载所需的库压缩包:jpegsrc.v6b.tar.gz或 jpegsrc.v8b.tar.gz 然后将下载的压缩包随便放在和解压到你喜欢的地方. # t ...
- android权限申请Permission
代码地址如下: http://www.demodashi.com/demo/12432.html android在6.0系统以后,权限申请变得麻烦起来,今天介绍一个超级好用的权限申请库,我在使用中经过 ...
- Android Doze and App Standby模式详解
Android Doze and App Standby模式详解 来源:腾云阁 https://www.qcloud.com/community Optimizing for Doze and Ap ...
- Android四大组件Service之AIDL详解
Android四大组件Service之AIDL详解 前言 简介 基础知识 AIDL 服务端 定义AIDL文件规则 创建 .aidl 文件 清单注册 通过 IPC 传递对象 调用 IPC 方法 Andr ...
最新文章
- 2021年大数据HBase(十一):Apache Phoenix的视图操作
- jupyter notebook配置
- python的顶级高手_Python+深度学习
- Java/Android中实现Shell命令
- 点击预览,有时可以打开,有时不可以
- 看新排美国话剧《哗变》
- 【深度学习系列】——神经网络的可视化解释
- 记录最近待学习的内容
- ubuntu16.04装机7:安装VScode
- Python解压zip和rar文件
- 双线性函数的紧凑超平面散列(Compact Hyperplane Hashing with Bilinear Functions)阅读笔记
- Ps(Adobephoto shop)当中布尔运算的使用方法
- MatLab msgbox用法
- 关于iphone开发前期环境搭建过程中需要注意的一些要点
- java 代码阅读工具_java-tracer
- 对于分布式集群,应该思考什么问题?
- 供应链金融生态系统全解读,在不同的行业都有哪些模式?
- Android6.0运行时权限(危险权限列表)
- 计算机软件优化,如何优化计算机软件系统
- 如何查看pytorch、cuda版本