Android 手動獲取判斷處理權限
主要用到的幾個方法:
//檢查權限 int checkSelfPermission(String) //申請權限 void requestPermissions(int, String...) //是否應該顯示請求權限的說明 boolean shouldShowRequestPermissionRationale(String) //處理權限結果回調(diào) void onRequestPermissionsResult(int,String[],int[])
是否有權限常量標識:
PackageManager.PERMISSION_DENIED:拒絕了。 PackageManager.PERMISSION_GRANTED:授權了
上述四個方法中,前三個方法在support-v4的ActivityCompat中都有,建議使用兼容庫中的方法。最后一個方法是用戶授權或者拒絕某個權限組時系統(tǒng)會回調(diào)Activity或者Fragment中的方法。
1. checkSelfPermission(String)
檢查權限
1. 檢查某一個權限的當前狀態(tài),你應該在請求某個權限時檢查這個權限是否已經(jīng)被用戶授權,已經(jīng)授權的權限重復申請可能會讓用戶產(chǎn)生厭煩。
2. 該方法有一個參數(shù)是權限名稱,有一個int的返回值,用這個值與上面提到的兩個常量做比較可判斷檢查的權限當前的狀態(tài)。
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
// 沒有權限,可以在這里重新申請權限。
}else{
// 有權限了。
}
2. requestPermissions(int, String…)
申請權限
請求用戶授權幾個權限,調(diào)用后系統(tǒng)會顯示一個請求用戶授權的提示對話框,App不能配置和修改這個對話框,如果需要提示用戶這個權限相關的信息或說明,需要在調(diào)用 requestPermissions() 之前處理
該方法有兩個參數(shù):
int requestCode: 會在回調(diào)onRequestPermissionsResult()時返回,用來判斷是哪個授權申請的回調(diào)。
String[] permissions: 權限數(shù)組,你需要申請的的權限的數(shù)組。
由于該方法是異步的,所以無返回值,當用戶處理完授權操作時,會回調(diào)Activity或者Fragment的onRequestPermissionsResult()方法。
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CONTACTS}, MMM);
3. onRequestPermissionsResult(int,String[],int[])
處理權限結果回調(diào)
1. 該方法在Activity/Fragment中應該被重寫,當用戶處理完授權操作時,系統(tǒng)會自動回調(diào)該方法
2. 該方法有三個參數(shù):
int requestCode: 在調(diào)用requestPermissions()時的第一個參數(shù)。
String[] permissions: 權限數(shù)組,在調(diào)用requestPermissions()時的第二個參數(shù)。
int[] grantResults: 授權結果數(shù)組,對應permissions,具體值和上方提到的PackageManager中的兩個常量做比較。
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case MMM: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 權限被用戶同意,可以做你要做的事情了。
} else {
// 權限被用戶拒絕了,可以提示用戶,關閉界面等等。
}
return;
}
}
}
4. shouldShowRequestPermissionRationale(String)
是否應該顯示請求權限的說
1.第一次請求權限時,用戶拒絕了,調(diào)用shouldShowRequestPermissionRationale()后返回true,應該顯示一些為什么需要這個權限的說明。
2.用戶在第一次拒絕某個權限后,下次再次申請時,授權的dialog中將會出現(xiàn)“不再提醒”選項,一旦選中勾選了,那么下次申請將不會提示用戶。
3.第二次請求權限時,用戶拒絕了,并選擇了“不在提醒”的選項,調(diào)用shouldShowRequestPermissionRationale()后返回false。
4.設備的策略禁止當前應用獲取這個權限的授權:shouldShowRequestPermissionRationale()返回false 。
5.加這個提醒的好處在于,用戶拒絕過一次權限后我們再次申請時可以提醒該權限的重要性,面得再次申請時用戶勾選“不再提醒”并決絕,導致下次申請權限直接失敗。
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {// 沒有權限。
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_CONTACTS)) {
// 用戶拒絕過這個權限了,應該提示用戶,為什么需要這個權限。
} else {
// 申請授權。
ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}, MMM);
}
}
...
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case MMM: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 權限被用戶同意。
} else {
// 權限被用戶拒絕了。
}
return;
}
}
}
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關文章
Input系統(tǒng)按鍵事件的分發(fā)處理示例詳解
這篇文章主要為大家介紹了Input系統(tǒng)按鍵事件的分發(fā)處理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
Android實現(xiàn)游戲中的漸隱和漸現(xiàn)動畫效果
本文給大家分享android中實現(xiàn)游戲中的漸隱漸現(xiàn)的動畫效果,在游戲開發(fā)中經(jīng)常會遇到,對android漸隱漸現(xiàn)效果感興趣的朋友可以參考下本教程2016-09-09
Android中應用界面主題Theme使用方法和頁面定時跳轉應用
在Android SDK中內(nèi)置了下面的Theme,可以按標題欄Title Bar和狀態(tài)欄Status Bar是否可見來分類,感興趣的朋友可以了解下哈2013-06-06

