代码地址如下:
http://www.demodashi.com/demo/12432.html

android在6.0系统以后,权限申请变得麻烦起来,今天介绍一个超级好用的权限申请库,我在使用中经过再次f封装,使用起来更加方便。

今天的内容涉及:

1.权限库依赖

2.申请代码的调用

3.项目结构图和效果图

1.权限库依赖

在app的build.gradle中做库依赖:

compile 'com.lovedise:permissiongen:0.0.6'

2.申请代码的调用

将要申请的权限放到一个数组中,例如你要申请读写权限,可以这样

//申请读写权限
String permissions[] = {Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE};

我将权限申请的繁杂代码封装到PermisionHelper中,

然后在要申请权限的地方这样调用:

PermissionHelper.getInstance().checkPermissions(permissions, MainActivity.this);

当然,你还需要重写activity的

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

方法,在里面做如下操作:

    @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
PermissionHelper.getInstance().onRequestPermissionsResult(requestCode, permissions, grantResults);
}

监听权限申请成功或失败,你需要在activity中写如下两个方法做接收

    @PermissionSuccess(requestCode = PermissionHelper.NORMAL_PERMISSION)
public void requestSuccess(){
showToast("获取读写权限成功!");
//执行你的逻辑操作
//...
} @PermissionFail(requestCode = PermissionHelper.NORMAL_PERMISSION)
public void requestFail(){
//不给权限就退出
showToast("获取读写权限失败!");
//执行你的逻辑操作
//...
}

权限使用与接收在activity中完整代码示例如下:

package com.android.permissiondemo;

import android.Manifest;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast; import kr.co.namee.permissiongen.PermissionFail;
import kr.co.namee.permissiongen.PermissionSuccess; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button mBtnPermission; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initView();
initData();
setListener();
} private void initView() {
mBtnPermission = findViewById(R.id.btn_permission);
} private void initData() { } private void setListener() {
mBtnPermission.setOnClickListener(this);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_permission:
//申请读写权限
String permissions[] = {Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE};
PermissionHelper.getInstance().checkPermissions(permissions, MainActivity.this);
break;
default:
break;
}
} @PermissionSuccess(requestCode = PermissionHelper.NORMAL_PERMISSION)
public void requestSuccess(){
showToast("获取读写权限成功!");
//执行你的逻辑操作
//...
} @PermissionFail(requestCode = PermissionHelper.NORMAL_PERMISSION)
public void requestFail(){
//不给权限就退出
showToast("获取读写权限失败!");
//执行你的逻辑操作
//...
} @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
PermissionHelper.getInstance().onRequestPermissionsResult(requestCode, permissions, grantResults);
} private void showToast(String s){
Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show();
} }

然后MainActivity的布局文件activity_main.xml很简单,这里也贴一下吧,方便大家理解

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"> <Button
android:id="@+id/btn_permission"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="权限申请"/> </RelativeLayout>

最后不要忘了在Mainfast.xml中添加读写权限:

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

3.项目结构图和效果图

项目结构图如下:

运行效果图如下:



android权限申请Permission

代码地址如下:
http://www.demodashi.com/demo/12432.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

最新文章

  1. 【译】用jQuery 处理XML-- jQuery与XML
  2. eclipse配置PHP开发环境
  3. bootstrap插件学习-bootstrap.tooltip.js
  4. Memcached——非关系型数据库分布式处理
  5. hdu5832 A water problem
  6. Sheet can not be presented because the view is not in a window的解决办法,和window的简单使用
  7. cocos2d-x 判断系统语言
  8. 从页面底部向上弹出dialog,消失时逐渐向下(转)
  9. Groovy简洁开发,我用到的简洁之处
  10. Putty远程登录VMware虚拟机Linux(Ubuntu12.04)
  11. layui,返回的数据不符合规范,正确的成功状态码 (code) 应为:0
  12. Vue(day7)
  13. 痞子衡嵌入式:ARM Cortex-M文件那些事(7)- 反汇编文件(.s/.lst/.dump)
  14. linux之特殊字符
  15. ssl协议
  16. 摄像头录制视频并且保存成mp4
  17. Linux系统运维笔记(三),设置IP和DNS
  18. Java 8函数式接口functional interface的秘密
  19. Logstash自带正则表达式
  20. Eclipse配置C++环境

热门文章

  1. spring 解决中文乱码问题
  2. Redis集群_主从配置
  3. bzoj 2563 贪心 思想
  4. Treblecross(uva 10561)
  5. 洛谷[P3622] 动物园
  6. Mongoose 参考手册
  7. 64位linux 汇编
  8. Oracle 表分区partition(http://love-flying-snow.iteye.com/blog/573303)
  9. ansible 通过网络下载和上传文件
  10. [HAOI2011]Problem b&amp;&amp;[POI2007]Zap