文章目录
一、添加依赖
二、在 AndroidManifest.xml 中配置权限
三、权限申请最简单用法
四、推荐使用的用法
五、GitHub 地址
上一篇博客 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 完整代码示例 | 申请权限 | 申请权限原理对话框 | 引导用户手动设置权限对话框 ) 是权限申请的详细用法 , 针对用户 拒绝 , 永久拒绝 权限申请操作都有对应的处理方案 , 如果只是简单的使用 , 只调用 EasyPermissions.requestPermissions 方法即可 ;
一、添加依赖
在 Module 级别的 build.gradle 中进行如下配置 :
dependencies { // 使用 Android X 的应用添加该依赖 implementation 'pub.devrel:easypermissions:3.0.0' // 使用 Android Support Library 支持库 , 添加该依赖 implementation 'pub.devrel:easypermissions:2.0.1' }
注意 使用不同的支持库 , 需要配置不同的 EasyPermissions 依赖库 ;
使用 Android X : 需要添加 3.0.0 版本的依赖 ;
使用 Android Support Library 支持库 : 需要添加 2.0.1 版本的依赖 ;
二、在 AndroidManifest.xml 中配置权限
一定不要忘记在 AndroidManifest.xml 中配置权限 , 否则无法使用 ;
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="kim.hsl.easypermissions"> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
三、权限申请最简单用法
只需要在需要权限的时候调用 EasyPermissions.requestPermissions 方法即可 ;
如果用户拒绝后 , 再次点击即可 ;
package kim.hsl.easypermissions import android.Manifest import android.os.Bundle import android.util.Log import android.view.View import androidx.appcompat.app.AppCompatActivity import pub.devrel.easypermissions.EasyPermissions class MainActivitySimple : AppCompatActivity(){ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } fun onCLick(view : View){ EasyPermissions.requestPermissions( this, "权限申请原理对话框 : 描述申请权限的原理", 100, // 下面是要申请的权限 可变参数列表 Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_CONTACTS, Manifest.permission.READ_SMS, Manifest.permission.WRITE_EXTERNAL_STORAGE ) } }
四、推荐使用的用法
推荐使用的用法 :
① 先判定是否有权限 : 调用 EasyPermissions.hasPermissions 判定是否有权限 ;
如果有 : 直接执行相关逻辑 ;
如果没有 : 调用 EasyPermissions.requestPermissions 执行申请权限相关逻辑 ;
② 权限授权完毕 : 执行完毕后再次调用相同的方法 , 这里需要使用 @AfterPermissionGranted 注解 ;
如果用户拒绝权限 , 就不让用户继续使用后续功能 , 不能处理永久拒绝的情况 ;
package kim.hsl.easypermissions import android.Manifest import android.os.Bundle import android.view.View import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import pub.devrel.easypermissions.AfterPermissionGranted import pub.devrel.easypermissions.EasyPermissions class MainActivitySimple2 : AppCompatActivity(){ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } fun onCLick(view : View){ doSomethingWithPermissions() } @AfterPermissionGranted( 100 ) fun doSomethingWithPermissions(){ if(EasyPermissions.hasPermissions(this, Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_CONTACTS, Manifest.permission.READ_SMS, Manifest.permission.WRITE_EXTERNAL_STORAGE)){ // 如果有上述权限, 执行该操作 Toast.makeText(this, "权限申请通过", Toast.LENGTH_LONG).show() }else{ // 如果没有上述权限 , 那么申请权限 EasyPermissions.requestPermissions( this, "权限申请原理对话框 : 描述申请权限的原理", 100, Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_CONTACTS, Manifest.permission.READ_SMS, Manifest.permission.WRITE_EXTERNAL_STORAGE ) } } }
五、GitHub 地址
https://github.com/han1202012/EasyPermissions