Android权限申请完全解析(一):Android自带的权限申请
1.為什么要權限申請
6.0以上就需要了,別問為什么。(不是重點,自行搜索)
2.如何進行權限申請
- Android自帶的權限申請
- 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自带的权限申请的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: go 语言 链表 的增删改查
- 下一篇: 《人件集》阅读笔记第一篇