這篇文章給大家分享的是有關(guān)Android中EasyPermissions官方庫高效處理權(quán)限的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),昆山企業(yè)網(wǎng)站建設(shè),昆山品牌網(wǎng)站建設(shè),網(wǎng)站定制,昆山網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,昆山網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
介紹:
easypermission庫是一個簡化基本的系統(tǒng)權(quán)限邏輯的庫,可用于在Android M或者更高版本上。
1 相關(guān)文檔
官方文檔:
https://github.com/googlesamples/easypermissions
運行時權(quán)限官方文檔解釋:
https://developer.android.com/training/permissions/requesting.html
2 為什么使用Easypermissions
Android M對權(quán)限系統(tǒng)進行了改變。Android M之前所需權(quán)限只需要在AndroidManifest中申請即可。但更新Android M系統(tǒng)后,部分“Dangerous Permission”需要在運行時詢問申請。
導(dǎo)入EasyPermissions依賴庫:
在Module的build.gradle中添加以下代碼。
dependencies { compile 'pub.devrel:easypermissions:1.0.1' }
依賴庫配置完成后,開始使用。
使用步驟
1. 使用EasyPermissions檢查權(quán)限:
權(quán)限可以是單個,也可以是一些列。在EasyPermission庫中,使用EasyPermissions#hasPermissions(...)檢查若干權(quán)限。
/**
*
* @param context
* return true:已經(jīng)獲取權(quán)限
* return false: 未獲取權(quán)限,主動請求權(quán)限
*/
public static boolean checkPermission(Activity context,String[] perms) {
return EasyPermissions.hasPermissions(context, perms);
}
EasyPermissions.hasPermissions():
第一個參數(shù) : Context參數(shù).例如,Activity對象。
第二個參數(shù) : 一些系列的權(quán)限。例如,public final static String[] PERMS_WRITE ={Manifest.permission.WRITE_EXTERNAL_STORAGE};
2. 使用EasyPermissions請求權(quán)限:
檢查后,發(fā)覺用戶沒有賦予權(quán)限,這時候需要代碼請求權(quán)限,讓用戶同意。
在EasyPermission庫中,使用EasyPermissions#requestPermissions,來請求權(quán)限。
/**
* 請求權(quán)限
* @param context
*/
public static void requestPermission(Activity context,String tip,int requestCode,String[] perms) {
EasyPermissions.requestPermissions(context, tip,requestCode,perms);
}
EasyPermissions.requestPermissions():
第一個參數(shù):Context對象 第二個參數(shù):權(quán)限彈窗上的文字提示語。告訴用戶,這個權(quán)限用途。 第三個參數(shù):這次請求權(quán)限的唯一標(biāo)示,code。 第四個參數(shù) : 一些系列的權(quán)限。
3. EasyPermissions響應(yīng)請求結(jié)果:
請求后,彈出系統(tǒng)權(quán)限彈窗,剩下是用戶是否授權(quán)操作。權(quán)限結(jié)果是回調(diào)在Activity或者Fragment中的重寫的onRequestPermissionsResult()方法中。
public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks{
//.....省略部分代碼。
/**
* 重寫onRequestPermissionsResult,用于接受請求結(jié)果
*
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//將請求結(jié)果傳遞EasyPermission庫處理
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
/**
* 請求權(quán)限成功。
* 可以彈窗顯示結(jié)果,也可執(zhí)行具體需要的邏輯操作
*
* @param requestCode
* @param perms
*/
@Override
public void onPermissionsGranted(int requestCode, List perms) {
ToastUtils.showToast(getApplicationContext(), "用戶授權(quán)成功");
}
/**
* 請求權(quán)限失敗
*
* @param requestCode
* @param perms
*/
@Override
public void onPermissionsDenied(int requestCode, List perms) {
ToastUtils.showToast(getApplicationContext(), "用戶授權(quán)失敗");
/**
* 若是在權(quán)限彈窗中,用戶勾選了'NEVER ASK AGAIN.'或者'不在提示',且拒絕權(quán)限。
* 這時候,需要跳轉(zhuǎn)到設(shè)置界面去,讓用戶手動開啟。
*/
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
new AppSettingsDialog.Builder(this).build().show();
}
}
}
將權(quán)限結(jié)果傳遞給EasyPermissions.onRequestPermissionsResult()來處理。、
EasyPermissions.onRequestPermissionsResult()方法:
第一個參數(shù): 請求的code 第二個參數(shù): 一些列的請求權(quán)限 第三個參數(shù): 用戶授權(quán)的結(jié)果 第四個參數(shù): 權(quán)限回調(diào)監(jiān)聽器
這里不需要手寫判斷權(quán)限是否成功的邏輯操作,而會在EasyPermissions.PermissionCallbacks監(jiān)聽器中響應(yīng)。
EasyPermissions.PermissionCallbacks接口:
onPermissionsGranted():
用戶授權(quán)成功,接下來執(zhí)行具體需要的邏輯操作
onPermissionsDenied():
用戶授權(quán)失敗,處理失敗的邏輯。
注意:若是在權(quán)限彈窗中,用戶勾選了'NEVER ASK AGAIN.'或者'不在提示',且拒絕權(quán)限。 這時候,需要跳轉(zhuǎn)到設(shè)置界面去,讓用戶手動開啟。
你可能并不滿足,需要手動調(diào)用邏輯處理方法。EasyPermissions庫為你考慮好了,具備強大之處。當(dāng)用戶同意權(quán)限后,可以不需要通過監(jiān)聽器方式來實現(xiàn),直接調(diào)用相關(guān)的邏輯代碼的方法。只需要使用@AfterPermissionGranted注解標(biāo)注邏輯處理的方法。
4. @AfterPermissionGranted注解:
@AfterPermissionGranted注解為了提供方便,但可以添加也可以不添加,是可選的。
好處:
使用了該注解,當(dāng)權(quán)限請求被用戶同意后,會根據(jù)請求code來執(zhí)行,相應(yīng)的含有@AfterPermissionGranted注解的方法。
簡化了請求成功操作流程,不需要在EasyPermissions.onRequestPermissionsResult()的回調(diào)監(jiān)聽器中請求成功的方法中,再次手動調(diào)用,獲取權(quán)限后需要操作的邏輯代碼。
以下代碼,請求寫入磁盤的權(quán)限,當(dāng)用戶同意權(quán)限后,彈出一個Toast彈窗的邏輯處理操作。
@AfterPermissionGranted(Constance.WRITE_PERMISSION_CODE) 是可選的
public void onPermissionsSuccess() {
ToastUtils.showToast(getApplicationContext(), "用戶授權(quán)成功");
}
當(dāng)用戶同意權(quán)限,該方法不需要手動調(diào)用,會匹配到的Constance.WRITE_PERMISSION_CODE請求碼,自動執(zhí)行。
5. 使用EasyPermissions處理權(quán)限被拒的情況:
在權(quán)限彈窗中,用戶可能直接拒絕權(quán)限,下次權(quán)限請求依舊會彈出該權(quán)限彈窗。除此之外,還可以勾選'NEVER ASK AGAIN.'或者'不在提示',且拒絕權(quán)限,下次請求權(quán)限,彈窗不能彈出,無法讓用戶授權(quán)。這時候,需要跳轉(zhuǎn)到設(shè)置界面去,讓用戶手動開啟。
在EasyPermission庫中,使用EasyPermissions.somePermissionPermanentlyDenied()來處理,是否勾選不再提示的選項。
/**
* 請求權(quán)限失敗
*
* @param requestCode
* @param perms
*/
@Override
public void onPermissionsDenied(int requestCode, List perms) {
ToastUtils.showToast(getApplicationContext(), "用戶授權(quán)失敗");
/**
* 若是在權(quán)限彈窗中,用戶勾選了'NEVER ASK AGAIN.'或者'不在提示',且拒絕權(quán)限。
* 這時候,需要跳轉(zhuǎn)到設(shè)置界面去,讓用戶手動開啟。
*/
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
new AppSettingsDialog.Builder(this).build().show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
//當(dāng)從軟件設(shè)置界面,返回當(dāng)前程序時候
case AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE:
//執(zhí)行Toast顯示或者其他邏輯處理操作
break;
}
}
以上代碼是,當(dāng)無法彈出權(quán)限彈框,直接跳轉(zhuǎn)到設(shè)置界面去,讓用戶手動開啟權(quán)限。
當(dāng)從設(shè)置界面返回時候,結(jié)果會在Activity或者Fragment中onActivityResult()響應(yīng)。
運行效果,如下:
感謝各位的閱讀!關(guān)于“Android中EasyPermissions官方庫高效處理權(quán)限的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!