一个获取权限的Activity

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.support.annotation.NonNull;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.util.Log;import java.util.ArrayList;import java.util.List;public class MPermissionsActivity extends AppCompatActivity {    private final String TAG = "MPermissions";    private int REQUEST_CODE_PERMISSION = 0x00099;    /**     * 请求权限     *     * @param permissions 请求的权限     * @param requestCode 请求权限的请求码     */    public void requestPermission(String[] permissions, int requestCode) {        this.REQUEST_CODE_PERMISSION = requestCode;        if (checkPermissions(permissions)) {            permissionSuccess(REQUEST_CODE_PERMISSION);        } else {            List<String> needPermissions = getDeniedPermissions(permissions);            ActivityCompat.requestPermissions(this, needPermissions.toArray(new String[needPermissions.size()]), REQUEST_CODE_PERMISSION);        }    }    /**     * 检测所有的权限是否都已授权     *     * @param permissions     * @return     */    private boolean checkPermissions(String[] permissions) {        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {            return true;        }        for (String permission : permissions) {            if (ContextCompat.checkSelfPermission(this, permission) !=                    PackageManager.PERMISSION_GRANTED) {                return false;            }        }        return true;    }    /**     * 获取权限集中需要申请权限的列表     *     * @param permissions     * @return     */    private List<String> getDeniedPermissions(String[] permissions) {        List<String> needRequestPermissionList = new ArrayList<>();        for (String permission : permissions) {            if (ContextCompat.checkSelfPermission(this, permission) !=                    PackageManager.PERMISSION_GRANTED ||                    ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {                needRequestPermissionList.add(permission);            }        }        return needRequestPermissionList;    }    /**     * 系统请求权限回调     *     * @param requestCode     * @param permissions     * @param grantResults     */    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        if (requestCode == REQUEST_CODE_PERMISSION) {            if (verifyPermissions(grantResults)) {                permissionSuccess(REQUEST_CODE_PERMISSION);            } else {                permissionFail(REQUEST_CODE_PERMISSION);                showTipsDialog();            }        }    }    /**     * 确认所有的权限是否都已授权     *     * @param grantResults     * @return     */    private boolean verifyPermissions(int[] grantResults) {        for (int grantResult : grantResults) {            if (grantResult != PackageManager.PERMISSION_GRANTED) {                return false;            }        }        return true;    }    /**     * 显示提示对话框     */    private void showTipsDialog() {        new AlertDialog.Builder(this)                .setTitle("提示信息")                .setMessage("当前应用缺少必要权限,该功能暂时无法使用。如若需要,请单击【确定】按钮前往设置中心进行权限授权。")                .setNegativeButton("取消", new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                    }                })                .setPositiveButton("确定", new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                        startAppSettings();                    }                }).show();    }    /**     * 启动当前应用设置页面     */    private void startAppSettings() {        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);        intent.setData(Uri.parse("package:" + getPackageName()));        startActivity(intent);    }    /**     * 获取权限成功     *     * @param requestCode     */    public  void permissionSuccess(int requestCode) {        Log.d(TAG, "获取权限成功=" + requestCode);    }    /**     * 权限获取失败     * @param requestCode     */    public void permissionFail(int requestCode) {        Log.d(TAG, "获取权限失败=" + requestCode);    }}

使用方法:

1、继承上面的Activity2、在你需要请求权限的地方调用 requestPermission(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CAMERA}, 0x0001);3、实现回调函数```java/**     * 权限成功回调函数     *     * @param requestCode     */    public void permissionSuccess(int requestCode) {        super.permissionSuccess(requestCode);        switch (requestCode) {            case 0x0001:                //to do sth                break;        }    }

更多相关文章

  1. Android第十五天 ContentProvider之ContentResover
  2. Android--fragment从activity中获取数据
  3. Activity的AsyncTask请求
  4. Volley的四大请求
  5. 使用Retrofit Https请求
  6. Android(安卓)之Http
  7. 获取麦克风音量
  8. 使用ThinkAndroid快速开发框架需要有以下权限
  9. xml解析,基于XmlPullParser

随机推荐

  1. MongoDB基础命令及操作 (仅学习)
  2. Oralce数据库设计规范V3
  3. 2.4.18预读算法详解
  4. 微服务架构 vs. SOA架构
  5. 读书 | Making Sense of Stream Processi
  6. Elasticsearch从入门到放弃:索引基本使用
  7. kafka-python基本使用
  8. UNIX传统文件系统s5fs的实现
  9. MongoDB 4.2 内核解析 – Change Stream
  10. 用MongoDB Change Streams 在BigQuery中