android 授權簡單使用


首先要在AndroidManifest.xml 加入權限 這里以存儲權限和相機權限 來演示

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.test.app">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />
    .....
</manifest>

 

可以先檢查是否有權限

val permission =
ActivityCompat.checkSelfPermission(
    context,
    Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
​
val cameraPermission =
ActivityCompat.checkSelfPermission(
    context,
    Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED
​
​
if (permission && cameraPermission) {
    //有權限了
    val file = File("路徑")
    if (!file.exists() || !file.isDirectory) {
        try {
            //創建好文件夾 為后面操作文件做准備
            file.mkdirs()
        } catch (e: IOException) {
​
        }
    }
}else{
    //這里調用授權請求
}

 


授權請求

try {
    ActivityCompat.requestPermissions(
        activity,//fragment 中使用 requireActivity()  activity 中使用this即可
        arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE
                ,Manifest.permission.CAMERA
               ),
        1 //requestCode  自己隨便定義一個數字即可  在回調的時候知道就行
    )
} catch (e: Exception) {
    //防止出問題 不catch的話 部分情況下會閃退 (禁用權限后,再次請求的話會閃退,使用模擬器和榮耀10測試,其他機型不清楚)
}

 

接下來是授權請求回調 (frgament 和 activity回調函數一樣)

override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (requestCode == 1) {
            val result = grantResults[0] == PackageManager.PERMISSION_GRANTED
            val result2 = grantResults[1] == PackageManager.PERMISSION_GRANTED
            if (result && result2) {
                //授權成功
            }else{
                Toast.makeText(context, "您取消了授權,如果您想要授權的話請到 設置-應用 找到\"測試\"應用手動授予相應權限", Toast.LENGTH_SHORT).show()
            }
        }
    }

 

判斷權限是否被拒絕過

val has = ActivityCompat.shouldShowRequestPermissionRationale(activity, permission)
//首次安裝app   未授權 has = false 這里就有點坑爹了,沒有授權需要去授權返回false很蒙蔽了
//拒絕后       has = true
//授權后       has = false   這里授權后不需要授權正常
//拒絕后不在提示 has = false   這里不能授權也正常
//感覺shouldShowRequestPermissionRationale好像沒啥用處,純粹出來打醬油的
//我們下面的分析 因為首次未授權返回false 所在在為false的情況下我們請求授權,一旦用戶拒絕后返回true 此時情況下
//我們不在讓用戶去授權,就是不在讓用戶有看見拒絕后不在提示的選項 ,而是直接讓用戶跳轉到app詳細設置頁,手動去授權

//has為true的情況下 不要在去請求權限了,可以使用彈框提示用戶自己去設置開啟權限
//否則再次彈出的話,會出現禁止后不再提示 當用戶點擊禁止后不再提示 就不會彈出請求框了
//再次判斷是否拒絕過 會返回true 所以我們需要在權限被用戶禁用一次后,就不再去請求權限
//而是使用彈框提示用戶 這樣用戶來使用該功能的時候,
//我們每次可以給一個提示,讓用戶自己手動選擇開啟權限

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM