安卓Android6.0权限动态获取操作示例
作者:都是坑
这篇文章主要介绍了安卓Android6.0权限动态获取操作,结合实例形式分析了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程序设计有所帮助。