【Android 應用開發】Google 官方 EasyPermissions 許可權申請庫 ( 最簡單用法 | 一行程式碼搞定許可權申請 | 推薦用法 )

2020-09-20 11:01:01



上一篇部落格 【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