您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Android中EasyPermissions官方庫高效處理權限的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
介紹:
easypermission庫是一個簡化基本的系統權限邏輯的庫,可用于在Android M或者更高版本上。
1 相關文檔
官方文檔:
https://github.com/googlesamples/easypermissions
運行時權限官方文檔解釋:
https://developer.android.com/training/permissions/requesting.html
2 為什么使用Easypermissions
Android M對權限系統進行了改變。Android M之前所需權限只需要在AndroidManifest中申請即可。但更新Android M系統后,部分“Dangerous Permission”需要在運行時詢問申請。
導入EasyPermissions依賴庫:
在Module的build.gradle中添加以下代碼。
dependencies { compile 'pub.devrel:easypermissions:1.0.1' }
依賴庫配置完成后,開始使用。
使用步驟
1. 使用EasyPermissions檢查權限:
權限可以是單個,也可以是一些列。在EasyPermission庫中,使用EasyPermissions#hasPermissions(...)檢查若干權限。
<code> /** * * @param context * return true:已經獲取權限 * return false: 未獲取權限,主動請求權限 */ public static boolean checkPermission(Activity context,String[] perms) { return EasyPermissions.hasPermissions(context, perms); }</code> EasyPermissions.hasPermissions():
第一個參數 : Context參數.例如,Activity對象。
第二個參數 : 一些系列的權限。例如,public final static String[] PERMS_WRITE ={Manifest.permission.WRITE_EXTERNAL_STORAGE};
2. 使用EasyPermissions請求權限:
檢查后,發覺用戶沒有賦予權限,這時候需要代碼請求權限,讓用戶同意。
在EasyPermission庫中,使用EasyPermissions#requestPermissions,來請求權限。
<code><code><code> /** * 請求權限 * @param context */ public static void requestPermission(Activity context,String tip,int requestCode,String[] perms) { EasyPermissions.requestPermissions(context, tip,requestCode,perms); }</code></code></code> EasyPermissions.requestPermissions():
第一個參數:Context對象 第二個參數:權限彈窗上的文字提示語。告訴用戶,這個權限用途。 第三個參數:這次請求權限的唯一標示,code。 第四個參數 : 一些系列的權限。
3. EasyPermissions響應請求結果:
請求后,彈出系統權限彈窗,剩下是用戶是否授權操作。權限結果是回調在Activity或者Fragment中的重寫的onRequestPermissionsResult()方法中。
<code><code><code>public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks{ //.....省略部分代碼。 /** * 重寫onRequestPermissionsResult,用于接受請求結果 * * @param requestCode * @param permissions * @param grantResults */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); //將請求結果傳遞EasyPermission庫處理 EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); } /** * 請求權限成功。 * 可以彈窗顯示結果,也可執行具體需要的邏輯操作 * * @param requestCode * @param perms */ @Override public void onPermissionsGranted(int requestCode, List<string> perms) { ToastUtils.showToast(getApplicationContext(), "用戶授權成功"); } /** * 請求權限失敗 * * @param requestCode * @param perms */ @Override public void onPermissionsDenied(int requestCode, List<string> perms) { ToastUtils.showToast(getApplicationContext(), "用戶授權失敗"); /** * 若是在權限彈窗中,用戶勾選了'NEVER ASK AGAIN.'或者'不在提示',且拒絕權限。 * 這時候,需要跳轉到設置界面去,讓用戶手動開啟。 */ if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) { new AppSettingsDialog.Builder(this).build().show(); } } }</string></string></code></code></code>
將權限結果傳遞給EasyPermissions.onRequestPermissionsResult()來處理。、
EasyPermissions.onRequestPermissionsResult()方法:
第一個參數: 請求的code 第二個參數: 一些列的請求權限 第三個參數: 用戶授權的結果 第四個參數: 權限回調監聽器
這里不需要手寫判斷權限是否成功的邏輯操作,而會在EasyPermissions.PermissionCallbacks監聽器中響應。
EasyPermissions.PermissionCallbacks接口:
onPermissionsGranted():
用戶授權成功,接下來執行具體需要的邏輯操作
onPermissionsDenied():
用戶授權失敗,處理失敗的邏輯。
注意:若是在權限彈窗中,用戶勾選了'NEVER ASK AGAIN.'或者'不在提示',且拒絕權限。 這時候,需要跳轉到設置界面去,讓用戶手動開啟。
你可能并不滿足,需要手動調用邏輯處理方法。EasyPermissions庫為你考慮好了,具備強大之處。當用戶同意權限后,可以不需要通過監聽器方式來實現,直接調用相關的邏輯代碼的方法。只需要使用@AfterPermissionGranted注解標注邏輯處理的方法。
4. @AfterPermissionGranted注解:
@AfterPermissionGranted注解為了提供方便,但可以添加也可以不添加,是可選的。
好處:
使用了該注解,當權限請求被用戶同意后,會根據請求code來執行,相應的含有@AfterPermissionGranted注解的方法。
簡化了請求成功操作流程,不需要在EasyPermissions.onRequestPermissionsResult()的回調監聽器中請求成功的方法中,再次手動調用,獲取權限后需要操作的邏輯代碼。
以下代碼,請求寫入磁盤的權限,當用戶同意權限后,彈出一個Toast彈窗的邏輯處理操作。
<code><code><code><code><code><code><code><code> @AfterPermissionGranted(Constance.WRITE_PERMISSION_CODE) 是可選的 public void onPermissionsSuccess() { ToastUtils.showToast(getApplicationContext(), "用戶授權成功"); }</code></code></code></code></code></code></code></code>
當用戶同意權限,該方法不需要手動調用,會匹配到的Constance.WRITE_PERMISSION_CODE請求碼,自動執行。
5. 使用EasyPermissions處理權限被拒的情況:
在權限彈窗中,用戶可能直接拒絕權限,下次權限請求依舊會彈出該權限彈窗。除此之外,還可以勾選'NEVER ASK AGAIN.'或者'不在提示',且拒絕權限,下次請求權限,彈窗不能彈出,無法讓用戶授權。這時候,需要跳轉到設置界面去,讓用戶手動開啟。
在EasyPermission庫中,使用EasyPermissions.somePermissionPermanentlyDenied()來處理,是否勾選不再提示的選項。
<code><code><code><code><code><code><code><code><code> /** * 請求權限失敗 * * @param requestCode * @param perms */ @Override public void onPermissionsDenied(int requestCode, List<string> perms) { ToastUtils.showToast(getApplicationContext(), "用戶授權失敗"); /** * 若是在權限彈窗中,用戶勾選了'NEVER ASK AGAIN.'或者'不在提示',且拒絕權限。 * 這時候,需要跳轉到設置界面去,讓用戶手動開啟。 */ 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) { //當從軟件設置界面,返回當前程序時候 case AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE: //執行Toast顯示或者其他邏輯處理操作 break; } }</string></code></code></code></code></code></code></code></code></code>
以上代碼是,當無法彈出權限彈框,直接跳轉到設置界面去,讓用戶手動開啟權限。
當從設置界面返回時候,結果會在Activity或者Fragment中onActivityResult()響應。
運行效果,如下:
感謝各位的閱讀!關于“Android中EasyPermissions官方庫高效處理權限的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。