国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

android6.0運行時權限完美封裝方法

2019-10-21 21:44:30
字體:
來源:轉載
供稿:網友

前幾天看了郭大神的運行時權限的專講,深受啟發,由于現在基于目前項目中的運行時權限封裝的還不是那么完美,趁著郭神建議的還是歷歷在目。于是把它完整的敲了下來。并在此基礎上添加上自己的一些見解,封裝成一個完整的demo,希望與大家進行交流與。

android,權限,封裝

在這里我進行了簡單的在activity中簡單進行獲取權限和工具類封:

android,權限,封裝

某一個權限被禁止或者是所有的權限被禁止,這里我做了去到烯烴界面去設置的處理:

android,權限,封裝

如果要開啟多個權限的話,則可能不同的手機顯示的效果不同,有些手機在權限Dialog上顯示需要獲取權限的個數,但有些手機需要多少個權限顯示多少個。

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

android,權限,封裝

部分代碼:

/** * 類功能描述:在activity中進行檢測權限的簡單方法 </br> * 博客地址:http://blog.csdn.net/androidstarjack * @author 老于 * @version 1.0 </p> 修改時間:</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);//去請求權限    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){//權限被拒絕啦     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); } /**  * 丟失權限,進行彈框設置  */ public void showMissPermissionDialog() {  if (builder == null) {   builder = new AlertDialog.Builder(BasePermisitionActivity.this);   builder.setTitle("幫助");   String msg = "當前應用缺少必要權限。<br>/r請點擊/"設置/"-/"權限/"-打開所需權限。<br>/r/r最后點擊兩次后退按鈕,即可返回。";   builder.setMessage(Html.fromHtml(msg));   //materialDialog.setMovementMethod(LinkMovementMethod.getInstance());   builder.setPositiveButton("設置", 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();  } } // 啟動應用的設置 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();  } }}

與其相關的工具類:

/** * 類功能描述:6.0運行時權限 </br> * permission權限控制器</br> * 博客地址:http://blog.csdn.net/androidstarjack * @author 老于 * Created on 2017/1/3/002 * @version 1.0 </p> 修改時間:</br> 修改備注:</br> */public class PermisionControl { /**  * 檢查所有的權限是否被禁止  */ 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; }  /**  * 請求運行時權限  * eg:  */ public void requestRuntimePermission(QuestPermissionListener questPermissionListener, String... permissions){  BasePermisitionActivity.requestRuntimePermission(permissions,questPermissionListener); }}

以及其他的一些封裝:

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

以上這篇android6.0運行時權限完美封裝方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泰安市| 汝州市| 金川县| 拉萨市| 瑞昌市| 西贡区| 磐石市| 广宗县| 申扎县| 娱乐| 阳东县| 马山县| 苍溪县| 昭苏县| 东乌珠穆沁旗| 大埔县| 霍林郭勒市| 济宁市| 昔阳县| 赤城县| 苍溪县| 靖江市| 太谷县| 宝兴县| 鲁山县| 西昌市| 萨嘎县| 台南市| 平原县| 永年县| 呼和浩特市| 航空| 黄浦区| 繁峙县| 临猗县| 南木林县| 宁远县| 永仁县| 宝清县| 巫溪县| 临汾市|