欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android基于注解的6.0權限動態(tài)請求框架詳解

 更新時間:2018年04月19日 08:32:49   作者:猛猛的小盆友  
這篇文章主要介紹了Android基于注解的6.0權限動態(tài)請求框架詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前言

安卓6.0之后,一些敏感權限需要進行動態(tài)請求,雖說編寫請求授權代碼并不難,但是每次一需要權限就需要在視圖中添加一段代碼,嚴重影響代碼美觀,同時也增加了一點點工作量。

于是,小盆友閑暇之余基于AOP封裝了一個基于注解的權限請求框架。如果有幸加入您的項目,使用過程中有問題或是有哪些不便,請留言區(qū)或github上與我交流,共同進步。如果喜歡這個框架請給個star和❤️。

github地址:https://github.com/zincPower/JPermission

先上圖,看看效果。。。第一次錄制,效果比較差,請將就下??上螺d源碼進行親自操作。

示例圖

如何接入

1、在項目的gradle中添加如下代碼

buildscript {
  repositories {
    google()
    jcenter()
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:3.0.0'
    classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:1.1.0' //添加這一行
  }
}

allprojects {
  repositories {
    google()
    jcenter()
    maven { url 'https://jitpack.io' }   //添加這一行
  }
}

值得一提:如果你的工程里gradle版本是3.0.0以上,請使用aspectjx:1.1.0以上版本,否則會報Required: PROJECT, SUB_PROJECTS, EXTERNAL_LIBRARIES. Found: EXTERNAL_LIBRARIES, PROJECT, PROJECT_LOCAL_DEPS, SUB_PROJECTS, SUB_PROJECTS_LOCAL_DEPS

aspectjx歷史版本查看地址:https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx/blob/master/CHANGELOG.md

2、在app的module中增加如下

代碼

apply plugin: 'com.android.application'
apply plugin: 'android-aspectjx' //添加這一行

在依賴中增加:

compile 'com.github.zincPower:JPermission:0.1'

簡單使用

1、在需要請求權限的方法加上注解 @Permission,請求權限可以多個,如下

//requestCode可設可不設,框架自帶默認值。在取消和拒絕回調中,會將這個值返回,用于各自請求邏輯處理
@Permission({Manifest.permission.WRITE_EXTERNAL_STORAGE}, requestCode = 100)
private void requestOnePermission() {
  //do something
}

2、編寫取消和拒絕(即點擊了“不再提示”)回調,如下:

@PermissionCanceled()
private void cancel(CancelInfo cancelInfo) {
  //do something when the permission was canceled.
}

@PermissionDenied()
private void deny(DenyInfo denyInfo) {
  //do something when the permission was denied.
}

值得一提:如果被拒絕,可以彈一個對話框,詢問是否要前往系統(tǒng)權限頁面讓用戶自己手動開啟。如果需要的話,可以通過以下代碼前往(對話框自行解決,本框架不包含):

//前往開啟權限的界面
JPermissionUtil.goToMenu(context);

高級使用

1、請求manifest中的所有權限(主要用于app開啟時,進行一次權限請求)

//不需要回調監(jiān)聽
JPermissionUtil.requestAllPermission(this);

//需要回調監(jiān)聽
JPermissionUtil.requestAllPermission(this, new IPermission() {
      @Override
      public void ganted() {
        Log.i(JPermissionHelper.TAG, "ganted====》申請manifest的全部");
      }

      @Override
      public void denied(int requestCode, List<String> denyList) {
        Log.i(JPermissionHelper.TAG, "denied====》申請manifest的全部{code=" + requestCode + ";denyList=" + denyList + "}");
      }

      @Override
      public void canceled(int requestCode) {
        Log.i(JPermissionHelper.TAG, "canceled===》申請manifest的全部{code= " + requestCode + "}");
      }
    });

某些特殊情況,初始請求中比較敏感(例如:讀取手機短信 或 定位權限 等),可以使用以下代碼進行剔除初始請求中所包含的權限

List<String> excluePermission = new ArrayList<>();
excluePermission.add(Manifest.permission.CAMERA);
excluePermission.add(Manifest.permission.ACCESS_FINE_LOCATION);
//不需要回調
JPermissionUtil.requestAllPermission(this, excluePermission);

//需要回調
JPermissionUtil.requestAllPermission(this, excluePermission, new IPermission() {
  @Override
  public void ganted() {
    
  }

  @Override
  public void denied(int requestCode, List<String> denyList) {

  }

  @Override
  public void canceled(int requestCode) {

  }
});

2、配置前往的系統(tǒng)權限頁,框架自帶了默認的系統(tǒng)權限頁,但如需根據(jù)不同品牌進行個性化設置,可在代碼增加如下代碼

//第一個參數(shù)為品牌,框架會根據(jù)Build.MANUFACTURER進行匹配(大小寫均可)
//第二個參數(shù)為需要處理的類class文件,需要實現(xiàn)IMenu接口
JPermissionUtil.setManuFacturer("genymotion", MyTestGenymotionMenu.class);

3、設置有回調值的取消和拒絕回調。如果請求權限時,填了requestCode=200,則取消或拒絕時會調用requestCode相同(此處即為200)的方法。

@PermissionCanceled(requestCode = 200)
private void cancelCode200(CancelInfo cancelInfo){
  Toast.makeText(this, "cancel__200", Toast.LENGTH_SHORT).show();
}

@PermissionDenied(requestCode = 200)
private void denyCode200(DenyInfo denyInfo){
  Toast.makeText(this, "deny__200", Toast.LENGTH_SHORT).show();
}

值得一提:調用了requestCode相同的方法,同時也會調用不設置requestCode的方法。

4、service和fragment中均可使用

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Android視頻懸浮窗口實現(xiàn)的示例代碼

    Android視頻懸浮窗口實現(xiàn)的示例代碼

    這篇文章主要介紹了Android視頻懸浮窗口實現(xiàn)的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • kotlin 注解 @Parcelize 使用示例和步驟詳解

    kotlin 注解 @Parcelize 使用示例和步驟詳解

    Parcelable 接口是 Android 中用于在組件之間傳遞對象的一種方式,在 Kotlin 中,@Parcelize 注解用于簡化實現(xiàn) Android Parcelable 接口的過程,本文給大家分享kotlin 注解 @Parcelize 使用示例,感興趣的朋友一起看看吧
    2024-06-06
  • OpenGL ES渲染管線概述(一)

    OpenGL ES渲染管線概述(一)

    這篇文章主要為大家詳細介紹了OpenGL ES渲染管線的簡單概述,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • android中RecyclerView自定義分割線實現(xiàn)

    android中RecyclerView自定義分割線實現(xiàn)

    本篇文章主要介紹了android中RecyclerView自定義分割線實現(xiàn),由于RecyclerView的布局方式多種多樣,所以它的分割線也根據(jù)布局的不同有所差異,本文只針對LinearLayoutManager線性布局。
    2017-03-03
  • Ubuntu中為Android系統(tǒng)上實現(xiàn)內置C可執(zhí)行程序測試Linux內核驅動程序

    Ubuntu中為Android系統(tǒng)上實現(xiàn)內置C可執(zhí)行程序測試Linux內核驅動程序

    本文主要介紹在Ubuntu上為Android系統(tǒng)內置C可執(zhí)行程序測試Linux內核驅動程序,這里對測試Linux 內核驅動程序做了詳細介紹,并附有代碼示例,有興趣的小伙伴可以參考下
    2016-08-08
  • 實例詳解Android文件存儲數(shù)據(jù)方式

    實例詳解Android文件存儲數(shù)據(jù)方式

    總體的來講,數(shù)據(jù)存儲方式有三種:一個是文件,一個是數(shù)據(jù)庫,另一個則是網絡。下面通過本文給大家介紹Android文件存儲數(shù)據(jù)方式,對android文件存儲數(shù)據(jù)相關知識感興趣的朋友一起學習吧
    2016-01-01
  • Android全面屏適配與判斷超詳細講解

    Android全面屏適配與判斷超詳細講解

    這篇文章主要介紹了Android 全面屏適配及判斷是否為全面屏,全面屏手勢和虛擬導航欄的判斷,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-01-01
  • Android?實現(xiàn)卡片堆疊錢包管理動畫效果

    Android?實現(xiàn)卡片堆疊錢包管理動畫效果

    這篇文章主要介紹了Android?實現(xiàn)卡片堆疊錢包管理動畫效果,實現(xiàn)思路是在動畫回調中requestLayout?實現(xiàn)動畫效果,用Bounds?對象記錄每一個CardView?對象的初始位置,當前位置,運動目標位置,需要的朋友可以參考下
    2022-07-07
  • Android編程使用ListView實現(xiàn)數(shù)據(jù)列表顯示的方法

    Android編程使用ListView實現(xiàn)數(shù)據(jù)列表顯示的方法

    這篇文章主要介紹了Android編程使用ListView實現(xiàn)數(shù)據(jù)列表顯示的方法,實例分析了Android中ListView控件的使用技巧,需要的朋友可以參考下
    2016-01-01
  • android 定時啟動\取消小例子

    android 定時啟動\取消小例子

    本文為大家講解下android實現(xiàn)定時啟動\取消的具體實現(xiàn)方式,感興趣的朋友可以參考下哈
    2013-06-06

最新評論