當需要取得敏感資料或操作裝置硬體設備時,需要在專案中設定相關權限,而系統會根據權限的重要性來選擇是否自動允許或詢問使用者。
以錄音程式為例,開發者需在AndroidManifest.xml檔中加入錄音的相關權限,擺放位置如圖。
<uses-permission android:name="android.permission.RECORD_AUDIO" />
因為錄音屬於重要權限,所以要在程式碼中確認使用者是否給予權限,若未經過使用者同意就使用錄音相關功能,會造成應用程式崩潰
//Step1:宣告錄音權限
val permission = android.Manifest.permission.RECORD_AUDIO
//Step2:確認使用者是否以允許,第一個參數為使用的對象,第二個參數為確認的權限內容,若允許則執行後續的錄音流程,否則向使用者要求權限
if (ActivityCompat.checkSelfPermission(this, permission)
!= PackageManager.PERMISSION_GRANTED){
//Step3:向使用者要求權限,第一個參數為使用的對象,第二個參數為權限的內容(需傳array),第三個為識別標籤
ActivityCompat.requestPermissions(this, arrayOf(permission), 0)
} else {
//...已經允許錄音了,這邊寫錄音流程
}
//Step4:回傳授權要求後的結果
override fun onRequestPermissionResult(
requestCode: Int,
permissions: Array<out String>,
grantResult: IntArray
){
//Step5:判斷是否有結果且識別標籤相同
if (grantResults.isNotEmpty() && requestCode == 0){
//Step6:取出結果並判斷是否允許權限
val result = grantResult[0]
if (result == PackageManager.PERMISSION_DENIED)
//拒絕給予錄音權限時給的處理
else {
//已允許錄音權限所以執行後續錄音過程
}
}
}