Android权限申请完全解析(一):Android自带的权限申请
1.為什么要權(quán)限申請(qǐng)
6.0以上就需要了,別問(wèn)為什么。(不是重點(diǎn),自行搜索)
2.如何進(jìn)行權(quán)限申請(qǐng)
- Android自帶的權(quán)限申請(qǐng)
- EasyPermission權(quán)限申請(qǐng)
Ps:EasyPermission還沒(méi)開(kāi)始玩,下次玩透了寫(xiě)博客。
3.權(quán)限申請(qǐng)的具體寫(xiě)法
3.1 假設(shè)有一個(gè)需要權(quán)限才能運(yùn)行的方法
/*** 假設(shè)這是一個(gè)需要權(quán)限才能運(yùn)行的方法*/private void PermissionTest() {Toast.makeText(this, "這是一個(gè)需要權(quán)限才能運(yùn)行的方法!", Toast.LENGTH_SHORT).show();} 3.2 申請(qǐng)單個(gè)權(quán)限,比如說(shuō):打電話(huà)
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) {// 不相等 請(qǐng)求授權(quán)ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);} else {PermissionTest();}}}); 權(quán)限申請(qǐng)的時(shí)候,需要判斷是否已經(jīng)有權(quán)限了,如果有,則直接運(yùn)行,沒(méi)有的話(huà)在進(jìn)入權(quán)限申請(qǐng)。單個(gè)權(quán)限比較簡(jiǎn)單。Activity.requestPermissions的方法需要三個(gè)參數(shù),第一個(gè):Context,第二個(gè):傳入需要申請(qǐng)的權(quán)限(可多個(gè)),第三個(gè):請(qǐng)求代碼(用于回調(diào)處理)
3.2 申請(qǐng)多個(gè)權(quán)限
button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this, "You clicked Button2", Toast.LENGTH_SHORT).show();//一次申請(qǐng)兩個(gè)權(quán)限的寫(xiě)法,當(dāng)然判斷的時(shí)候有一個(gè)權(quán)限沒(méi)有申請(qǐng)的時(shí)候無(wú)法執(zhí)行當(dāng)前方法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();}}}); 一次申請(qǐng)兩個(gè)權(quán)限的寫(xiě)法(多個(gè)權(quán)限類(lèi)似,多加幾個(gè)恍恍惚惚),當(dāng)然,判斷的時(shí)候有一個(gè)權(quán)限沒(méi)有申請(qǐng)的時(shí)候無(wú)法執(zhí)行當(dāng)前方法。
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.RECORD_AUDIO,Manifest.permission.WRITE_EXTERNAL_STORAGE},2); 傳入需要申請(qǐng)的權(quán)限,這里申請(qǐng)錄音和寫(xiě)存儲(chǔ)卡的方法。請(qǐng)求代碼傳入2
3.3 回調(diào)處理
@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: " +"電話(huà)權(quán)限申請(qǐng)成功");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: " +"權(quán)限申請(qǐng)成功");PermissionTest();}else{Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();}break;default:break;}} 說(shuō)明:請(qǐng)求代碼的窗口跳出,用戶(hù)點(diǎn)擊之后,每個(gè)權(quán)限就能夠判斷是否申請(qǐng)成功了。
分支語(yǔ)句switch(requestCode),每一個(gè)case就是之前傳入的請(qǐng)求碼
case1 說(shuō)明:
單個(gè)權(quán)限已經(jīng)被申請(qǐng),判斷方法,grantResult數(shù)組長(zhǎng)度大于0,grantResult數(shù)組的第一項(xiàng)的值等于PackageManager.PERMISSION_GRANTED (其實(shí)就是0,沒(méi)有被授權(quán)的話(huà)值等于-1)。然后執(zhí)行PermissionTest方法。
case2 說(shuō)明:
和case1一樣,先判斷grantResult數(shù)組長(zhǎng)度大于0,grantResult數(shù)組的第一二兩項(xiàng)是否等于PackageManager.PERMISSION_GRANTED(因?yàn)橹挥袃蓚€(gè)選項(xiàng)所以我就直接寫(xiě)了),權(quán)限申請(qǐng)之完畢之后就能夠運(yùn)行PermissionTest()方法了。
case2的判斷語(yǔ)句可改進(jìn):定一個(gè)isAllGranted,掃一遍grantRsult,就好了
Boolean isAllGranted = true;for (int permission : grantResults) {if (permission != PackageManager.PERMISSION_GRANTED){isAllGranted = false;}} Ps:測(cè)試了一下,grantResults.length > 0 好像可以不用寫(xiě)。。。汗。。
結(jié)束語(yǔ)
權(quán)限申請(qǐng)之前一直懵逼,看了書(shū)之后還是不怎么會(huì)寫(xiě),真到要用的時(shí)候心里一直怕怕的。今天剛好放假,所以花了一些時(shí)間來(lái)寫(xiě)這篇博客。這應(yīng)該是我第一篇真正的Android博客了吧。下次更新Easy的使用。
歡迎大家觀看,需要幫助可以留言。相遇就是緣分!
轉(zhuǎn)載于:https://www.cnblogs.com/kumaxiong/p/8146339.html
總結(jié)
以上是生活随笔為你收集整理的Android权限申请完全解析(一):Android自带的权限申请的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: go 语言 链表 的增删改查
- 下一篇: 微信网名三个字男生