亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

android6.0運(yùn)行時(shí)權(quán)限完美封裝方法

 更新時(shí)間:2018年07月30日 14:22:03   作者:androidstarjack  
今天小編就為大家分享一篇android6.0運(yùn)行時(shí)權(quán)限完美封裝方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

前幾天看了郭大神的運(yùn)行時(shí)權(quán)限的專講,深受啟發(fā),由于現(xiàn)在基于目前項(xiàng)目中的運(yùn)行時(shí)權(quán)限封裝的還不是那么完美,趁著郭神建議的還是歷歷在目。于是把它完整的敲了下來。并在此基礎(chǔ)上添加上自己的一些見解,封裝成一個(gè)完整的demo,希望與大家進(jìn)行交流與。

在這里我進(jìn)行了簡(jiǎn)單的在activity中簡(jiǎn)單進(jìn)行獲取權(quán)限和工具類封:

某一個(gè)權(quán)限被禁止或者是所有的權(quán)限被禁止,這里我做了去到烯烴界面去設(shè)置的處理:

如果要開啟多個(gè)權(quán)限的話,則可能不同的手機(jī)顯示的效果不同,有些手機(jī)在權(quán)限D(zhuǎn)ialog上顯示需要獲取權(quán)限的個(gè)數(shù),但有些手機(jī)需要多少個(gè)權(quán)限顯示多少個(gè)。

最后一步處理:如果某個(gè)權(quán)限被禁止的話,則到設(shè)置界面去提示用戶去打開權(quán)限:

部分代碼:

/**
 * 類功能描述:在activity中進(jìn)行檢測(cè)權(quán)限的簡(jiǎn)單方法 </br>
 * 博客地址:http://blog.csdn.net/androidstarjack
 * @author 老于
 * @version 1.0 </p> 修改時(shí)間:</br> 修改備注:</br>
 */
public class CheckPermissionOnActivity extends AppCompatActivity {
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_checkpermission1);
  ButterKnife.bind(this);
 }
 @OnClick({R.id.btn_runtimne_onClick, R.id.btn_runtimne_onClick_multify,R.id.btn_runtimne_onClick_seting})
 public void onMyListener(View v){
  switch (v.getId()){
   case R.id.btn_runtimne_onClick:
    requestToUserPersiom(1);
    break;
   case R.id.btn_runtimne_onClick_multify:
    requestToUserPersiom(2);
    break;
   case R.id.btn_runtimne_onClick_seting:
    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
    intent.setData(Uri.parse("package:"+ getPackageName()));
    startActivity(intent);
    break;
  }
 }
 public void requestToUserPersiom(int permisionIndexCount){
  switch (permisionIndexCount){
   case 1:
    ActivityCompat.requestPermissions(CheckPermissionOnActivity.this, new String[]{android.Manifest.permission.CALL_PHONE},100);//去請(qǐng)求權(quán)限
    break;
   case 2:
   case 3:
   case 4:
    ActivityCompat.requestPermissions(CheckPermissionOnActivity.this, new String[]{android.Manifest.permission.CALL_PHONE,android.Manifest.permission.WRITE_EXTERNAL_STORAGE},100);
    break;
 
  }
 }
 
 @Override
 public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  if(requestCode == 100){
   if(grantResults.length >0 ){
    for (int i = 0; i < grantResults.length; i++) {
     if( grantResults[i] == PackageManager.PERMISSION_DENIED){//拒絕啦
      return ;
     }
    }
    doosmething();
   }
  }
 }
 
 /**
  * 做其他事情
  */
 public void doosmething(){
  GetToast.useString(CheckPermissionOnActivity.this,"開始做其他事情了");
 }
}

封裝成BaseActivitgy工具類:

public class BasePermisitionActivity extends Activity {
 
 private static final int REQUESTPERMISSION_CODE = 100;
 private static QuestPermissionListener questPermissionListener;
 private AlertDialog.Builder builder;
 private AlertDialog alertDialog;
 
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  ActivityManager.addPermissionActivty(this);
 }
 
 public static void requestRuntimePermission(String [] permissions,QuestPermissionListener questPermissionListener){
  Activity actyivty = ActivityManager.permissionActivilyList.get(ActivityManager.permissionActivilyList.size() -1);
  if(actyivty == null){
   return;
  }
  List<String> neetRequestPermisList = new ArrayList<String>();
  for (String permission : permissions) {
   if(ActivityCompat.checkSelfPermission(actyivty,permission) == PackageManager.PERMISSION_DENIED){
    neetRequestPermisList.add(permission);
   }
  }
  BasePermisitionActivity.questPermissionListener = questPermissionListener;
  if(!neetRequestPermisList.isEmpty()){
   ActivityCompat.requestPermissions(actyivty,neetRequestPermisList.toArray(new String[neetRequestPermisList.size()]),REQUESTPERMISSION_CODE);
  }
 }
 
 @Override
 public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  if(requestCode == REQUESTPERMISSION_CODE){
   for (int i = 0; i < grantResults.length; i++) {
    int granrRequest = grantResults[i];
    if(granrRequest == PackageManager.PERMISSION_DENIED){//權(quán)限被拒絕啦
     if(questPermissionListener != null){
      questPermissionListener.denySomePermission();
     }
      return;
    }
   }
   questPermissionListener.doAllPermissionGrant();
  }
 }
 
 @Override
 protected void onResume() {
  super.onResume();
 
 }
 
 
 public void onResumeCheckPermission(String ...permission){
  if(PermisionControl.lackMissPermission(this,permission)){
   showMissPermissionDialog();
  }
 }
 
 
 @Override
 protected void onDestroy() {
  super.onDestroy();
  ActivityManager.removePermissionActiivty(this);
 }
 /**
  * 丟失權(quán)限,進(jìn)行彈框設(shè)置
  */
 public void showMissPermissionDialog() {
  if (builder == null) {
   builder = new AlertDialog.Builder(BasePermisitionActivity.this);
   builder.setTitle("幫助");
   String msg = "當(dāng)前應(yīng)用缺少必要權(quán)限。<br>\r請(qǐng)點(diǎn)擊\"設(shè)置\"-\"權(quán)限\"-打開所需權(quán)限。<br>\r\r最后點(diǎn)擊兩次后退按鈕,即可返回。";
   builder.setMessage(Html.fromHtml(msg));
   //materialDialog.setMovementMethod(LinkMovementMethod.getInstance());
   builder.setPositiveButton("設(shè)置", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
     alertDialog.dismiss();
    }
   });
   builder.setNegativeButton("退出", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
     alertDialog.dismiss();
     startAppSettings();
    }
   });
   alertDialog = builder.create();
   alertDialog.show();
  } else {
   alertDialog.show();
  }
 }
 // 啟動(dòng)應(yīng)用的設(shè)置
 public void startAppSettings() {
  try {
   Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
   intent.setData(Uri.parse("package:"+ getPackageName()));
   startActivity(intent);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

與其相關(guān)的工具類:

/**
 * 類功能描述:6.0運(yùn)行時(shí)權(quán)限 </br>
 * permission權(quán)限控制器</br>
 * 博客地址:http://blog.csdn.net/androidstarjack
 * @author 老于
 * Created on 2017/1/3/002
 * @version 1.0 </p> 修改時(shí)間:</br> 修改備注:</br>
 */
public class PermisionControl {
 /**
  * 檢查所有的權(quán)限是否被禁止
  */
 public static boolean lackMissPermission(Context cnt ,String... permission){
  boolean relust = true ;
  for (String per : permission) {
   if(ActivityCompat.checkSelfPermission(cnt,per) == PackageManager.PERMISSION_DENIED){
    relust = false ;
    break;
   }
  }
  return relust;
 }
 
 /**
  * 請(qǐng)求運(yùn)行時(shí)權(quán)限
  * eg:
  */
 public void requestRuntimePermission(QuestPermissionListener questPermissionListener, String... permissions){
  BasePermisitionActivity.requestRuntimePermission(permissions,questPermissionListener);
 }
}

以及其他的一些封裝:

public class PermissionUsage {
 /**********權(quán)限:打電話,寫入內(nèi)存卡,定位********/
 public static String[] LOACATION_CAMERA = { Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CALL_PHONE,
   Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_EXTERNAL_STORAGE};
 /**********權(quán)限:讀取內(nèi)存卡********/
 public static String[] READ_EXTRASORE = { Manifest.permission.READ_EXTERNAL_STORAGE};
 /**********權(quán)限:打電話權(quán)限********/
 public static String[] RCALL_PHONE = { Manifest.permission.READ_EXTERNAL_STORAGE};
}

以上這篇android6.0運(yùn)行時(shí)權(quán)限完美封裝方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android PraiseTextView實(shí)現(xiàn)朋友圈點(diǎn)贊功能

    Android PraiseTextView實(shí)現(xiàn)朋友圈點(diǎn)贊功能

    這篇文章主要為大家詳細(xì)介紹了PraiseTextView簡(jiǎn)單實(shí)現(xiàn)朋友圈點(diǎn)贊功能的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android中實(shí)現(xiàn)布局背景模糊化處理的方法

    Android中實(shí)現(xiàn)布局背景模糊化處理的方法

    這篇文章主要介紹了Android中實(shí)現(xiàn)布局背景模糊化處理的方法,需要的朋友可以參考下
    2015-04-04
  • Android 判斷是否連接成功了指定wifi

    Android 判斷是否連接成功了指定wifi

    本文主要介紹了Android 判斷是否連接成功了指定wifi的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-04-04
  • Android實(shí)戰(zhàn)教程第五篇之一鍵鎖屏應(yīng)用

    Android實(shí)戰(zhàn)教程第五篇之一鍵鎖屏應(yīng)用

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)戰(zhàn)教程第五篇之一鍵鎖屏應(yīng)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 使用Eclipse配置android開發(fā)環(huán)境教程

    使用Eclipse配置android開發(fā)環(huán)境教程

    這篇文章主要介紹了使用Eclipse配置android開發(fā)環(huán)境教程,本文講解了下載需要用到的工具、下載完需要的工具之后開始安裝、讓Ecplise自動(dòng)安裝Android開發(fā)插件(ADT- plugin)、配置Andiord SDK路徑、測(cè)試開發(fā)一個(gè)Android項(xiàng)目等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Android調(diào)用系統(tǒng)時(shí)間格式顯示時(shí)間信息

    Android調(diào)用系統(tǒng)時(shí)間格式顯示時(shí)間信息

    這篇文章主要介紹了Android調(diào)用系統(tǒng)時(shí)間格式顯示時(shí)間信息的使用方法,代碼很簡(jiǎn)單
    2014-01-01
  • Android基于ViewPager實(shí)現(xiàn)類似微信頁面切換效果

    Android基于ViewPager實(shí)現(xiàn)類似微信頁面切換效果

    這篇文章主要介紹了Android基于ViewPager實(shí)現(xiàn)類似微信頁面切換效果,通過Fragment適配器實(shí)現(xiàn)頁面切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android自定義Dialog的2種常見方法

    Android自定義Dialog的2種常見方法

    這篇文章主要分享了Android自定義Dialog的2種常見方法,大多數(shù)中,使用系統(tǒng)內(nèi)置的dialog并不能滿足UE的設(shè)計(jì)需要,關(guān)于兩種方法下面文章將詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-05-05
  • Android中Glide庫的使用小技巧總結(jié)

    Android中Glide庫的使用小技巧總結(jié)

    Glide是 Google推薦的圖片加載庫,相信大家都不陌生,這篇文章主要給大家總結(jié)介紹了關(guān)于Android中Glide庫的使用小技巧,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Kotlin中ListView與RecyclerView的應(yīng)用講解

    Kotlin中ListView與RecyclerView的應(yīng)用講解

    這篇文章主要介紹了Kotlin中ListView與RecyclerView的應(yīng)用講解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09

最新評(píng)論