日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android开发之6.0动态权限工具类(高德地图官方扣出来的)附源码

發布時間:2023/12/15 Android 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android开发之6.0动态权限工具类(高德地图官方扣出来的)附源码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

感覺這個權限申請類寫的比較好。

使用方法:activity直接繼承就可以了。

看下mainactivity.java

package com.qfy.permissiondemo;import android.os.Bundle;public class MainActivity extends CheckPermissionsActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);} }

?

再來看下申請權限的CheckPermissionsActivity.java

?

/****/ package com.qfy.xiayiyemap;import android.Manifest; import android.annotation.TargetApi; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; import android.provider.Settings; import android.view.KeyEvent;import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List;/*** 繼承了Activity,實現Android6.0的運行時權限檢測* 需要進行運行時權限檢測的Activity可以繼承這個類** @author hongming.wang* @創建時間:2016年5月27日 下午3:01:31* @項目名稱: AMapLocationDemo* @文件名稱:PermissionsChecker.java* @類型名稱:PermissionsChecker* @since 2.5.0*/ public class CheckPermissionsActivity extends Activity {/*** 需要進行檢測的權限數組*/protected String[] needPermissions = {Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.READ_PHONE_STATE};private static final int PERMISSON_REQUESTCODE = 0;/*** 判斷是否需要檢測,防止不停的彈框*/private boolean isNeedCheck = true;@Overrideprotected void onResume() {super.onResume();if (Build.VERSION.SDK_INT >= 23&& getApplicationInfo().targetSdkVersion >= 23) {if (isNeedCheck) {checkPermissions(needPermissions);}}}/*** @param permissions* @since 2.5.0*/private void checkPermissions(String... permissions) {try {if (Build.VERSION.SDK_INT >= 23&& getApplicationInfo().targetSdkVersion >= 23) {List<String> needRequestPermissonList = findDeniedPermissions(permissions);if (null != needRequestPermissonList&& needRequestPermissonList.size() > 0) {String[] array = needRequestPermissonList.toArray(new String[needRequestPermissonList.size()]);Method method = getClass().getMethod("requestPermissions", new Class[]{String[].class, int.class});method.invoke(this, array, PERMISSON_REQUESTCODE);}}} catch (Throwable e) {}}/*** 獲取權限集中需要申請權限的列表** @param permissions* @return* @since 2.5.0*/private List<String> findDeniedPermissions(String[] permissions) {List<String> needRequestPermissonList = new ArrayList<String>();if (Build.VERSION.SDK_INT >= 23&& getApplicationInfo().targetSdkVersion >= 23) {try {for (String perm : permissions) {Method checkSelfMethod = getClass().getMethod("checkSelfPermission", String.class);Method shouldShowRequestPermissionRationaleMethod = getClass().getMethod("shouldShowRequestPermissionRationale",String.class);if ((Integer) checkSelfMethod.invoke(this, perm) != PackageManager.PERMISSION_GRANTED|| (Boolean) shouldShowRequestPermissionRationaleMethod.invoke(this, perm)) {needRequestPermissonList.add(perm);}}} catch (Throwable e) {}}return needRequestPermissonList;}/*** 檢測是否所有的權限都已經授權** @param grantResults* @return* @since 2.5.0*/private boolean verifyPermissions(int[] grantResults) {for (int result : grantResults) {if (result != PackageManager.PERMISSION_GRANTED) {return false;}}return true;}@TargetApi(23)public void onRequestPermissionsResult(int requestCode,String[] permissions, int[] paramArrayOfInt) {if (requestCode == PERMISSON_REQUESTCODE) {if (!verifyPermissions(paramArrayOfInt)) {showMissingPermissionDialog();isNeedCheck = false;}}}/*** 顯示提示信息** @since 2.5.0*/private void showMissingPermissionDialog() {AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle(R.string.notifyTitle);builder.setMessage(R.string.notifyMsg);// 拒絕, 退出應用builder.setNegativeButton(R.string.cancel,new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {finish();}});builder.setPositiveButton(R.string.setting,new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {startAppSettings();}});builder.setCancelable(false);builder.show();}/*** 啟動應用的設置** @since 2.5.0*/private void startAppSettings() {Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);intent.setData(Uri.parse("package:" + getPackageName()));startActivity(intent);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {this.finish();return true;}return super.onKeyDown(keyCode, event);}}

這個類還有個好處,就是不需要繼承appcompatActivity,如果寫demo用到權限申請這個類無疑是最好的選擇!因為不需要繼承appcompatActivity類可以讓apk包非常小。如下圖;

如果看不懂,我直接提供一份源碼。大佬勿噴。

點擊下載

總結

以上是生活随笔為你收集整理的Android开发之6.0动态权限工具类(高德地图官方扣出来的)附源码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。