網(wǎng)站首頁 編程語言 正文
1、權(quán)限
- 普通權(quán)限:不會直接威脅到用戶安全和隱私的權(quán)限
- 危險權(quán)限:那些可能會觸及用戶隱私或者對設(shè)備安全性造成影響的權(quán)限。
到Android 10 系統(tǒng)為止所以的危險權(quán)限
2、在程序運行時申請權(quán)限
- 普通權(quán)限申請:系統(tǒng)會自動幫我們進行授權(quán),不需要用戶手動操作。
- 危險權(quán)限申請:在Android6.0及以上系統(tǒng)在使用時必須進行運行時權(quán)限處理。
危險權(quán)限申請步驟
(1)判斷用戶是否給我們授權(quán)了。
checkSelfPermission()方法,第一個參數(shù)是Context,第二個參數(shù)是具體的權(quán)限名,然后我們使用方法的返回值和PackageManager.PERMISSION_GRANTED作比較。相等就說明用戶已經(jīng)授權(quán),我們直接執(zhí)行撥打電話的操作進行。不等就說明用戶沒有授權(quán),則需要調(diào)用ActivityCompat.requestPermissions()方法向用戶申請權(quán)限。requestPermissions()方法有三個參數(shù),第一個參數(shù)要求是Activity的實例,第二個參數(shù)是一個String數(shù)組,把要申請的權(quán)限名放入數(shù)組中,第三個參數(shù)是唯一的請求碼。
if(ContextCompat.checkSelfPermission(this,android.Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.CALL_PHONE),1)
}
else{
call()
}
(2)用戶已經(jīng)授權(quán),我們直接執(zhí)行撥打電話的操作。
private fun call(){
try {
val intent=Intent(Intent.ACTION_CALL)
intent.data= Uri.parse("tel:10086")
startActivity(intent)
}catch (e:SecurityException){
e.printStackTrace()
}
}
(3)用戶沒有授權(quán),調(diào)用ActivityCompat.requestPermissions()方法之后,系統(tǒng)會彈出一個權(quán)限申請的對話框,用戶可以選擇接受或者拒絕申請,最后回調(diào)到onRequestPermissionsResult()方法·。
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
when(requestCode){
1->{
if (grantResults.isNotEmpty()&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
call()
}
else{
Toast.makeText(this,"You denied the permission",Toast.LENGTH_SHORT).show()
}
}
}
}
原文鏈接:https://blog.csdn.net/weixin_63357306/article/details/126622914
相關(guān)推薦
- 2022-06-08 Spring Cloud Alibaba Nacos Config 加載配置
- 2022-11-12 Python教程之成員和身份運算符的用法詳解_python
- 2022-04-26 ASP.NET?Core?MVC中Required與BindRequired用法與區(qū)別介紹_基礎(chǔ)應(yīng)用
- 2022-02-24 Android基礎(chǔ)之隱藏標題欄/設(shè)置為全屏/橫豎屏切換_Android
- 2022-11-28 golang進程在docker中OOM后hang住問題解析_Golang
- 2022-07-19 element-ui表單動態(tài)添加必填校驗
- 2022-09-16 go?goroutine實現(xiàn)素數(shù)統(tǒng)計的示例_Golang
- 2022-06-18 C#如何綁定多個按鈕到同一個事件_C#教程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支