日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Android权限申请完全解析(一):Android自带的权限申请

發布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android权限申请完全解析(一):Android自带的权限申请 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.為什么要權限申請

6.0以上就需要了,別問為什么。(不是重點,自行搜索)

2.如何進行權限申請

  1. Android自帶的權限申請
  2. EasyPermission權限申請

Ps:EasyPermission還沒開始玩,下次玩透了寫博客。

3.權限申請的具體寫法

3.1 假設有一個需要權限才能運行的方法

    /*** 假設這是一個需要權限才能運行的方法*/private void PermissionTest() {Toast.makeText(this, "這是一個需要權限才能運行的方法!", Toast.LENGTH_SHORT).show();}

3.2 申請單個權限,比如說:打電話

        button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this, "You clicked Button1", Toast.LENGTH_SHORT).show();if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {// 不相等 請求授權ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);} else {PermissionTest();}}});

權限申請的時候,需要判斷是否已經有權限了,如果有,則直接運行,沒有的話在進入權限申請。單個權限比較簡單。Activity.requestPermissions的方法需要三個參數,第一個:Context,第二個:傳入需要申請的權限(可多個),第三個:請求代碼(用于回調處理)

3.2 申請多個權限

        button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this, "You clicked Button2", Toast.LENGTH_SHORT).show();//一次申請兩個權限的寫法,當然判斷的時候有一個權限沒有申請的時候無法執行當前方法if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.RECORD_AUDIO)!= PackageManager.PERMISSION_GRANTED  ||ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.RECORD_AUDIO,Manifest.permission.WRITE_EXTERNAL_STORAGE},2);}else{PermissionTest();}}});

一次申請兩個權限的寫法(多個權限類似,多加幾個恍恍惚惚),當然,判斷的時候有一個權限沒有申請的時候無法執行當前方法。

ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.RECORD_AUDIO,Manifest.permission.WRITE_EXTERNAL_STORAGE},2);

傳入需要申請的權限,這里申請錄音和寫存儲卡的方法。請求代碼傳入2

3.3 回調處理

    @Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {switch (requestCode) {case 1:if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {Log.d(TAG, "onRequestPermissionsResult: " +"電話權限申請成功");for (int i : grantResults) {Log.d(TAG, "onRequestPermissionsResult: " + i);}PermissionTest();}else {Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();}break;case 2:if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED){Log.d(TAG, "onRequestPermissionsResult: " +"權限申請成功");PermissionTest();}else{Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();}break;default:break;}}

說明:請求代碼的窗口跳出,用戶點擊之后,每個權限就能夠判斷是否申請成功了。

分支語句switch(requestCode),每一個case就是之前傳入的請求碼

case1 說明:
單個權限已經被申請,判斷方法,grantResult數組長度大于0,grantResult數組的第一項的值等于PackageManager.PERMISSION_GRANTED (其實就是0,沒有被授權的話值等于-1)。然后執行PermissionTest方法。

case2 說明:
和case1一樣,先判斷grantResult數組長度大于0,grantResult數組的第一二兩項是否等于PackageManager.PERMISSION_GRANTED(因為只有兩個選項所以我就直接寫了),權限申請之完畢之后就能夠運行PermissionTest()方法了。

case2的判斷語句可改進:定一個isAllGranted,掃一遍grantRsult,就好了

    Boolean isAllGranted = true;for (int permission : grantResults) {if (permission != PackageManager.PERMISSION_GRANTED){isAllGranted = false;}}

Ps:測試了一下,grantResults.length > 0 好像可以不用寫。。。汗。。

結束語

權限申請之前一直懵逼,看了書之后還是不怎么會寫,真到要用的時候心里一直怕怕的。今天剛好放假,所以花了一些時間來寫這篇博客。這應該是我第一篇真正的Android博客了吧。下次更新Easy的使用。

歡迎大家觀看,需要幫助可以留言。相遇就是緣分!

轉載于:https://www.cnblogs.com/kumaxiong/p/8146339.html

總結

以上是生活随笔為你收集整理的Android权限申请完全解析(一):Android自带的权限申请的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。