android权限申请Permission
2024-09-01 17:27:56
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
注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权
最新文章
- 【译】用jQuery 处理XML-- jQuery与XML
- eclipse配置PHP开发环境
- bootstrap插件学习-bootstrap.tooltip.js
- Memcached——非关系型数据库分布式处理
- hdu5832 A water problem
- Sheet can not be presented because the view is not in a window的解决办法,和window的简单使用
- cocos2d-x 判断系统语言
- 从页面底部向上弹出dialog,消失时逐渐向下(转)
- Groovy简洁开发,我用到的简洁之处
- Putty远程登录VMware虚拟机Linux(Ubuntu12.04)
- layui,返回的数据不符合规范,正确的成功状态码 (code) 应为:0
- Vue(day7)
- 痞子衡嵌入式:ARM Cortex-M文件那些事(7)- 反汇编文件(.s/.lst/.dump)
- linux之特殊字符
- ssl协议
- 摄像头录制视频并且保存成mp4
- Linux系统运维笔记(三),设置IP和DNS
- Java 8函数式接口functional interface的秘密
- Logstash自带正则表达式
- Eclipse配置C++环境
热门文章
- spring 解决中文乱码问题
- Redis集群_主从配置
- bzoj 2563 贪心 思想
- Treblecross(uva 10561)
- 洛谷[P3622] 动物园
- Mongoose 参考手册
- 64位linux 汇编
- Oracle 表分区partition(http://love-flying-snow.iteye.com/blog/573303)
- ansible 通过网络下载和上传文件
- [HAOI2011]Problem b&;&;[POI2007]Zap