最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android EasyPermissions官方庫(kù)高效處理權(quán)限相關(guān)教程

 更新時(shí)間:2017年11月13日 09:33:56   投稿:mrr  
Easypermissions簡(jiǎn)化了Android M的運(yùn)行時(shí)權(quán)限的申請(qǐng)、結(jié)果處理、判斷等步驟。這篇文章主要介紹了Android EasyPermissions官方庫(kù)高效處理權(quán)限相關(guān)教程,需要的朋友可以參考下

介紹:

easypermission庫(kù)是一個(gè)簡(jiǎn)化基本的系統(tǒng)權(quán)限邏輯的庫(kù),可用于在Android M或者更高版本上。

1 相關(guān)文檔

官方文檔:

https://github.com/googlesamples/easypermissions

運(yùn)行時(shí)權(quán)限官方文檔解釋:

https://developer.android.com/training/permissions/requesting.html

2 為什么使用Easypermissions

Android M對(duì)權(quán)限系統(tǒng)進(jìn)行了改變。Android M之前所需權(quán)限只需要在AndroidManifest中申請(qǐng)即可。但更新Android M系統(tǒng)后,部分“Dangerous Permission”需要在運(yùn)行時(shí)詢問(wèn)申請(qǐng)。

導(dǎo)入EasyPermissions依賴庫(kù):

在Module的build.gradle中添加以下代碼。

dependencies {
 compile 'pub.devrel:easypermissions:1.0.1'
}

依賴庫(kù)配置完成后,開(kāi)始使用。

使用步驟

1. 使用EasyPermissions檢查權(quán)限:

權(quán)限可以是單個(gè),也可以是一些列。在EasyPermission庫(kù)中,使用EasyPermissions#hasPermissions(...)檢查若干權(quán)限。

<code> /**
  *
  * @param context
  * return true:已經(jīng)獲取權(quán)限
  * return false: 未獲取權(quán)限,主動(dòng)請(qǐng)求權(quán)限
  */
 public static boolean checkPermission(Activity context,String[] perms) {
  return EasyPermissions.hasPermissions(context, perms);
 }</code>
EasyPermissions.hasPermissions():

第一個(gè)參數(shù) : Context參數(shù).例如,Activity對(duì)象。

第二個(gè)參數(shù) : 一些系列的權(quán)限。例如,public final static String[] PERMS_WRITE ={Manifest.permission.WRITE_EXTERNAL_STORAGE};

2. 使用EasyPermissions請(qǐng)求權(quán)限:

檢查后,發(fā)覺(jué)用戶沒(méi)有賦予權(quán)限,這時(shí)候需要代碼請(qǐng)求權(quán)限,讓用戶同意。

在EasyPermission庫(kù)中,使用EasyPermissions#requestPermissions,來(lái)請(qǐng)求權(quán)限。

<code><code><code> /**
  * 請(qǐng)求權(quán)限
  * @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():

第一個(gè)參數(shù):Context對(duì)象 第二個(gè)參數(shù):權(quán)限彈窗上的文字提示語(yǔ)。告訴用戶,這個(gè)權(quán)限用途。 第三個(gè)參數(shù):這次請(qǐng)求權(quán)限的唯一標(biāo)示,code。 第四個(gè)參數(shù) : 一些系列的權(quán)限。

3. EasyPermissions響應(yīng)請(qǐng)求結(jié)果:

請(qǐng)求后,彈出系統(tǒng)權(quán)限彈窗,剩下是用戶是否授權(quán)操作。權(quán)限結(jié)果是回調(diào)在Activity或者Fragment中的重寫(xiě)的onRequestPermissionsResult()方法中。

<code><code><code>public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks{
 //.....省略部分代碼。
 /**
  * 重寫(xiě)onRequestPermissionsResult,用于接受請(qǐng)求結(jié)果
  *
  * @param requestCode
  * @param permissions
  * @param grantResults
  */
 @Override
 public void onRequestPermissionsResult(int requestCode, 
  @NonNull String[] permissions, @NonNull int[] grantResults) {
  super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  //將請(qǐng)求結(jié)果傳遞EasyPermission庫(kù)處理
  EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
 }
 /**
  * 請(qǐng)求權(quán)限成功。
  * 可以彈窗顯示結(jié)果,也可執(zhí)行具體需要的邏輯操作
  *
  * @param requestCode
  * @param perms
  */
 @Override
 public void onPermissionsGranted(int requestCode, List<string> perms) {
  ToastUtils.showToast(getApplicationContext(), "用戶授權(quán)成功");
 }
 /**
  * 請(qǐng)求權(quán)限失敗
  *
  * @param requestCode
  * @param perms
  */
 @Override
 public void onPermissionsDenied(int requestCode, List<string> perms) {
  ToastUtils.showToast(getApplicationContext(), "用戶授權(quán)失敗");
  /**
   * 若是在權(quán)限彈窗中,用戶勾選了'NEVER ASK AGAIN.'或者'不在提示',且拒絕權(quán)限。
   * 這時(shí)候,需要跳轉(zhuǎn)到設(shè)置界面去,讓用戶手動(dòng)開(kāi)啟。
   */
  if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
   new AppSettingsDialog.Builder(this).build().show();
  }
 }
}</string></string></code></code></code>

將權(quán)限結(jié)果傳遞給EasyPermissions.onRequestPermissionsResult()來(lái)處理。、

EasyPermissions.onRequestPermissionsResult()方法:

第一個(gè)參數(shù): 請(qǐng)求的code 第二個(gè)參數(shù): 一些列的請(qǐng)求權(quán)限 第三個(gè)參數(shù): 用戶授權(quán)的結(jié)果 第四個(gè)參數(shù): 權(quán)限回調(diào)監(jiān)聽(tīng)器
這里不需要手寫(xiě)判斷權(quán)限是否成功的邏輯操作,而會(huì)在EasyPermissions.PermissionCallbacks監(jiān)聽(tīng)器中響應(yīng)。

EasyPermissions.PermissionCallbacks接口:

onPermissionsGranted():

用戶授權(quán)成功,接下來(lái)執(zhí)行具體需要的邏輯操作

onPermissionsDenied():

用戶授權(quán)失敗,處理失敗的邏輯。

注意:若是在權(quán)限彈窗中,用戶勾選了'NEVER ASK AGAIN.'或者'不在提示',且拒絕權(quán)限。 這時(shí)候,需要跳轉(zhuǎn)到設(shè)置界面去,讓用戶手動(dòng)開(kāi)啟。

你可能并不滿足,需要手動(dòng)調(diào)用邏輯處理方法。EasyPermissions庫(kù)為你考慮好了,具備強(qiáng)大之處。當(dāng)用戶同意權(quán)限后,可以不需要通過(guò)監(jiān)聽(tīng)器方式來(lái)實(shí)現(xiàn),直接調(diào)用相關(guān)的邏輯代碼的方法。只需要使用@AfterPermissionGranted注解標(biāo)注邏輯處理的方法。

4. @AfterPermissionGranted注解:

@AfterPermissionGranted注解為了提供方便,但可以添加也可以不添加,是可選的。

好處:

使用了該注解,當(dāng)權(quán)限請(qǐng)求被用戶同意后,會(huì)根據(jù)請(qǐng)求code來(lái)執(zhí)行,相應(yīng)的含有@AfterPermissionGranted注解的方法。

簡(jiǎn)化了請(qǐng)求成功操作流程,不需要在EasyPermissions.onRequestPermissionsResult()的回調(diào)監(jiān)聽(tīng)器中請(qǐng)求成功的方法中,再次手動(dòng)調(diào)用,獲取權(quán)限后需要操作的邏輯代碼。

以下代碼,請(qǐng)求寫(xiě)入磁盤(pán)的權(quán)限,當(dāng)用戶同意權(quán)限后,彈出一個(gè)Toast彈窗的邏輯處理操作。

<code><code><code><code><code><code><code><code> @AfterPermissionGranted(Constance.WRITE_PERMISSION_CODE) 是可選的
 public void onPermissionsSuccess() {
  ToastUtils.showToast(getApplicationContext(), "用戶授權(quán)成功");
 }</code></code></code></code></code></code></code></code>

當(dāng)用戶同意權(quán)限,該方法不需要手動(dòng)調(diào)用,會(huì)匹配到的Constance.WRITE_PERMISSION_CODE請(qǐng)求碼,自動(dòng)執(zhí)行。

5. 使用EasyPermissions處理權(quán)限被拒的情況:

在權(quán)限彈窗中,用戶可能直接拒絕權(quán)限,下次權(quán)限請(qǐng)求依舊會(huì)彈出該權(quán)限彈窗。除此之外,還可以勾選'NEVER ASK AGAIN.'或者'不在提示',且拒絕權(quán)限,下次請(qǐng)求權(quán)限,彈窗不能彈出,無(wú)法讓用戶授權(quán)。這時(shí)候,需要跳轉(zhuǎn)到設(shè)置界面去,讓用戶手動(dòng)開(kāi)啟。

在EasyPermission庫(kù)中,使用EasyPermissions.somePermissionPermanentlyDenied()來(lái)處理,是否勾選不再提示的選項(xiàng)。

<code><code><code><code><code><code><code><code><code> /**
  * 請(qǐng)求權(quán)限失敗
  *
  * @param requestCode
  * @param perms
  */
 @Override
 public void onPermissionsDenied(int requestCode, List<string> perms) {
  ToastUtils.showToast(getApplicationContext(), "用戶授權(quán)失敗");
  /**
   * 若是在權(quán)限彈窗中,用戶勾選了'NEVER ASK AGAIN.'或者'不在提示',且拒絕權(quán)限。
   * 這時(shí)候,需要跳轉(zhuǎn)到設(shè)置界面去,讓用戶手動(dòng)開(kāi)啟。
   */
  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)前程序時(shí)候
   case AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE:
    //執(zhí)行Toast顯示或者其他邏輯處理操作
    break;
  } 
 }</string></code></code></code></code></code></code></code></code></code>

以上代碼是,當(dāng)無(wú)法彈出權(quán)限彈框,直接跳轉(zhuǎn)到設(shè)置界面去,讓用戶手動(dòng)開(kāi)啟權(quán)限。

當(dāng)從設(shè)置界面返回時(shí)候,結(jié)果會(huì)在Activity或者Fragment中onActivityResult()響應(yīng)。

運(yùn)行效果,如下:

總結(jié)

以上所述是小編給大家介紹的Android EasyPermissions官方庫(kù)高效處理權(quán)限相關(guān)教程,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論

南宫市| 盐池县| 鄂尔多斯市| 迭部县| 闽清县| 祁东县| 师宗县| 武邑县| 布尔津县| 抚远县| 阿鲁科尔沁旗| 峨山| 济源市| 台中市| 南安市| 岗巴县| 枝江市| 邓州市| 繁昌县| 项城市| 木里| 乐东| 勃利县| 青冈县| 措勤县| 桃江县| 九江市| 广昌县| 金乡县| 得荣县| 溧水县| 东兰县| 上蔡县| 托里县| 邓州市| 绵竹市| 河北省| 仁化县| 甘孜县| 新巴尔虎左旗| 东乡族自治县|