zoukankan      html  css  js  c++  java
  • 高德地图的权限Activity代码

    /**
    *
    */
    package com.amap.location.demo;

    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.List;

    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;

    /**
    * 继承了Activity,实现Android6.0的运行时权限检测
    * 需要进行运行时权限检测的Activity可以继承这个类
    *
    * @创建时间:2016年5月27日 下午3:01:31
    * @项目名称: AMapLocationDemo
    * @author hongming.wang
    * @文件名称: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;

    @Override
    protected 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() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    finish();
    }
    });

    builder.setPositiveButton(R.string.setting,
    new DialogInterface.OnClickListener() {
    @Override
    public 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);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode == KeyEvent.KEYCODE_BACK){
    this.finish();
    return true;
    }
    return super.onKeyDown(keyCode, event);
    }

    }
  • 相关阅读:
    Android Studio 优秀插件: Parcelable Code Generator
    Android Studio 优秀插件:GsonFormat
    DrawerLayout(抽屉效果)
    Python拼接字符串的七种方式
    Python爬虫教程-使用chardet
    Python爬虫教程-实现百度翻译
    Tensorflow分布式部署和开发
    简单的Python GUI界面框架
    用keras构建自己的网络层 TensorFlow2.0教程
    Python GUI教程一:Hello World
  • 原文地址:https://www.cnblogs.com/weizhxa/p/7793192.html
Copyright © 2011-2022 走看看