網站首頁 編程語言 正文
1.首先確定你要申請的權限
可以定義成一個數組:如
protected String[] needPermissions = {
? ? ? ? ? ? Manifest.permission.WRITE_EXTERNAL_STORAGE,//存儲卡寫入權限
? ? ? ? ? ? Manifest.permission.READ_EXTERNAL_STORAGE,//存儲卡讀取權限
? ? ? ? ? ? Manifest.permission.READ_PHONE_STATE,//讀取手機狀態權限
? ? };
上訴權限是一個常量字符串,需要引入?import android.Manifest;
2.檢測權限有沒有獲取到,找出沒獲取到的去申請
private List<String> checkGamePer(){
? ? ? ? List<String> arr = new ArrayList<String>();
? ? ? ? for (String perm : needPermissions) {? ? ? ? ? ? ? ? //this參數要activity
? ? ? ? ? ? if (ContextCompat.checkSelfPermission(this, perm) != PackageManager.PERMISSION_GRANTED ) {
? ? ? ? ? ? ? ? arr.add(perm);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return arr;
? ? }
?List<String> arr = checkGamePer();
? ? ? ? if (arr.size()>0) {
? ? ? ? ? ? // 還有權限沒申請到,則申請權限,? this參數要activity
? ? ? ? ? ? ActivityCompat.requestPermissions(this, arr.toArray(new String[arr.size()]), 1);
? ? ? ? } else {
? ? ? ? ? ?//權限都申請到了,直接做你想做的事
? ? ? ? }
3.玩家點擊同意或者拒絕權限后會回調,在上訴this的activity中注冊回調函數
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == 1) {
Boolean flag = true;
for (int i = 0; i < permissions.length; i++) {
if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {//選擇了“始終允許”
flag = false;
}
}
if (flag) {
//申請成功
} else {
//失敗 退出游戲
finish();
}
}
}
這里的requestCode就是請求權限時,傳入的參數?
寫法2
//請求權限
protected List<String> mNeedRequestPMSList = new ArrayList<>();
void checkAndRequestPermissions(int requestCode) {
if(Build.VERSION.SDK_INT >= 23 &&
PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(MainActivity.activity,Manifest.permission.READ_PHONE_STATE)){
mNeedRequestPMSList.add(Manifest.permission.READ_PHONE_STATE);
}
checkAndRequestPermissionsEnd(Constants.REQUEST_PERMISSIONS_CODE_ViVo);
}
/**檢測權限結束 */
private void checkAndRequestPermissionsEnd(int requestCode){
if (0 == mNeedRequestPMSList.size()) {
/**
* 權限都已經有了
*/
permissionInit();
} else {
/**
* 有權限需要申請,主動申請。
*/
String[] temp = new String[mNeedRequestPMSList.size()];
mNeedRequestPMSList.toArray(temp);
ActivityCompat.requestPermissions(MainActivity.activity, temp, requestCode);
}
}
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
//是否用戶都點了允許
Boolean flag = true;
for (int i = 0; i < permissions.length; i++) {
if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {//選擇了“始終允許”
flag = false;
}
}
switch (requestCode) {
case Constants.REQUEST_PERMISSIONS_CODE_OPPO:
if (flag) {
ChannelMain.getInstance().agreePermission();
} else {
/**
* 如果用戶沒有授權,那么應該說明意圖,引導用戶去設置里面授權。
*/
Toast.makeText(this, "應用缺少SDK運行必須的READ_PHONE_STATE權限!請點擊\"應用權限\",打開所需要的權限。", Toast.LENGTH_LONG).show();
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
finish();
}
break;
default:
break;
}
}
?
原文鏈接:https://blog.csdn.net/xzl159/article/details/126155938
相關推薦
- 2023-08-13 Fastadmin后臺頁面添加頂部按鈕
- 2022-09-19 Tomcat10配置端口號為443(使用https訪問)_Tomcat
- 2023-06-18 Python實現將內容轉為base64編碼與解碼_python
- 2022-09-22 nodeSelector:Pod 定向調度
- 2023-07-05 React hooks之useEffect、useMemo優化技巧
- 2022-12-09 Flask自定義序列化超詳細講解_python
- 2022-05-21 基于Python實現Hash算法_python
- 2022-11-04 關于docker部署服務時ip無法訪問服務正常的問題_docker
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支