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

本文实例讲述了安卓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);

}

@Override

public 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>

送上效果图

注:更多关于Android权限控制的说明可点击此处查看Android权限操作说明

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android文件操作技巧汇总》、《Android资源操作技巧汇总》及《Android控件用法总结》

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

以上是 安卓Android6.0权限动态获取操作示例 的全部内容, 来源链接: utcz.com/z/339839.html

回到顶部