首页 > 系统 > Android > 正文

安卓Android6.0权限动态获取操作示例

2019-10-22 18:15:19
字体:
来源:转载
供稿:网友

本文实例讲述了安卓Android6.0权限动态获取操作。分享给大家供大家参考,具体如下:

众所周知 , 安卓6.0现在运用的越来越广泛 , 因为相对于之前的几个版本 , 对于用户权限这个概念确实不是很重视 , 而6.0 之后 , 为了提升用户的操作安全性 ,  运行时权限诞生了, 就是在用户运行软件的时候动态获取所需要的权限 , 下面跟大家分享一个我的代码案例 :

import android.Manifest;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.content.pm.PackageManager;import android.net.Uri;import android.provider.Settings;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.support.v7.app.AppCompatActivity;import android.view.KeyEvent;import java.util.ArrayList;import java.util.List;/** * 继承了Activity,实现Android6.0的运行时权限检测 * 需要进行运行时权限检测的Activity可以继承这个类 * * @author xingtao sun * @创建时间:2016年12月28日 * @项目名称: 安卓6.0运行时权限 */public class CheckPermissionsActivity extends AppCompatActivity    implements    ActivityCompat.OnRequestPermissionsResultCallback {  /**   * 需要进行检测的权限数组 这里只列举了几项 小伙伴可以根据自己的项目需求 来添加   */  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 (isNeedCheck) {      checkPermissions(needPermissions);    }  }  /**   * 检查权限   */  private void checkPermissions(String... permissions) {    List<String> needRequestPermissonList = findDeniedPermissions(permissions);    if (null != needRequestPermissonList        && needRequestPermissonList.size() > 0) {      ActivityCompat.requestPermissions(this,          needRequestPermissonList.toArray(              new String[needRequestPermissonList.size()]),          PERMISSON_REQUESTCODE);    }  }  /**   * 获取权限集中需要申请权限的列表   *   * @param permissions   * @return   * @since 2.5.0   */  private List<String> findDeniedPermissions(String[] permissions) {    List<String> needRequestPermissonList = new ArrayList<String>();    for (String perm : permissions) {      if (ContextCompat.checkSelfPermission(this,          perm) != PackageManager.PERMISSION_GRANTED          || ActivityCompat.shouldShowRequestPermissionRationale(          this, perm)) {        needRequestPermissonList.add(perm);      }    }    return needRequestPermissonList;  }  /**   * 检测是否有的权限都已经授权   *   * @param grantResults   */  private boolean verifyPermissions(int[] grantResults) {    for (int result : grantResults) {      if (result != PackageManager.PERMISSION_GRANTED) {        return false;      }    }    return true;  }  @Override  public void onRequestPermissionsResult(int requestCode,                      String[] permissions, int[] paramArrayOfInt) {    if (requestCode == PERMISSON_REQUESTCODE) {      if (!verifyPermissions(paramArrayOfInt)) {        showMissingPermissionDialog();        isNeedCheck = false;      }    }  }  /**   * 弹出对话框, 提示用户手动授权   *   */  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();}/** * 启动应用的设置 * */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);}

string资源

<resources>  <string name="app_name">My Library</string>  <string name="notifyTitle">提示</string>  <string name="notifyMsg">当前应用缺少必要权限。/n/n请点击/"设置/"-/"权限/"-打开所需权限。</string>  <string name="setting">设置</string>  <string name="cancel">取消</string></resources>

送上效果图

安卓,Android6.0,权限,动态

 

希望本文所述对大家Android程序设计有所帮助。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表