IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> android权限申请工具类 -> 正文阅读

[移动开发]android权限申请工具类

android6.0之后危险类的权限是需要申请用户确认后才能使用该权限的,下面写出权限申请的工具类,可申请一个权限或同时申请多个权限,可以是在Activity调用也可在fragment中调用。

代码如下:CheckPermission

package com.antbyte.video.utils;

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.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;


import com.antbyte.video.MyApp;
import com.antbyte.video.R;
import com.antbyte.video.activities.MainActivity;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by yangjianli on 2016/4/5 0005.
 */
public class CheckPermission {

    private static final String PACKAGE_URL_SCHEME = "package:"; // 方案
    /**
     * 6.0以上:activity单个权限申请
     * @param context
     * @param permissionName
     * @param requstCode
     * @return
     */
    public static boolean requestPermission(Activity context, String permissionName, int requstCode) {

        if (ContextCompat.checkSelfPermission(context, permissionName) != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(context, new String[]{permissionName}, requstCode);
            return false;
        } else {
            return true;
        }
    }

    /**
     * 6.0以上:activity多个权限申请
     * @param context
     * @param permissions
     * @param requstCode
     * @return
     */
    public static boolean requestPermissions(Activity context, List<String> permissions, int requstCode){

        List<String> needRequetPermissions = new ArrayList<>();
        for(int i = 0;i < permissions.size();i++){
            String permission =  permissions.get(i);
            if(ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED){
                needRequetPermissions.add(permission);
            }
        }

        int requestPermissionCount = needRequetPermissions.size();
        if(requestPermissionCount > 0){
            String[]requestPermissions = new String[requestPermissionCount];
            for(int i = 0;i < requestPermissionCount;i++){
                requestPermissions[i] = needRequetPermissions.get(i);
            }
            ActivityCompat.requestPermissions(context, requestPermissions, requstCode);
            return false;
        }else{
            return true;
        }
    }

    /**
     *:6.0以上:fragment的单个权限申请
     * @param activity
     * @param fragment
     * @param permissionName
     * @param requstCode
     * @return
     */
    @TargetApi(Build.VERSION_CODES.M)
    public static boolean requestPermissionFragment(Activity activity, Fragment fragment, String permissionName, int requstCode) {

        if (ContextCompat.checkSelfPermission(activity, permissionName) != PackageManager.PERMISSION_GRANTED) {

            fragment.requestPermissions(new String[]{permissionName}, requstCode);
            return false;
        } else {
            return true;
        }
    }

    /**
     *:6.0以上:fragment的多个权限申请
     * @param activity
     * @param fragment
     * @param permissions
     * @param requstCode
     * @return
     */
    @TargetApi(Build.VERSION_CODES.M)
    public static boolean requestPermissionFragments(Activity activity, Fragment fragment, List<String> permissions, int requstCode) {

        List<String> needRequetPermissions = new ArrayList<>();
        for(int i = 0;i < permissions.size();i++){
            String permission =  permissions.get(i);
            if(ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED){
                needRequetPermissions.add(permission);
            }
        }

        int requestPermissionCount = needRequetPermissions.size();
        if(requestPermissionCount > 0){
            String[]requestPermissions = new String[requestPermissionCount];
            for(int i = 0;i < requestPermissionCount;i++){
                requestPermissions[i] = needRequetPermissions.get(i);
            }
            fragment.requestPermissions(requestPermissions, requstCode);
            return false;
        }else{
            return true;
        }

    }

    // 显示缺失权限提示
    public static void showMissingPermissionDialog(final Activity context, String permission) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle(context.getResources().getString(R.string.dialog_permission_title));
        builder.setMessage("由于"+ MyApp.mApp.getResources().getString(R.string.app_name)+"不能获取设备信息的权限,不能正常运行,请设置" + permission + "权限后使用。设置路径:系统设置->"+ MyApp.mApp.getResources().getString(R.string.app_name)+"->权限");
        builder.setCancelable(false);
        // 拒绝, 退出应用
        builder.setNegativeButton(context.getResources().getString(R.string.dialog_permission_negative), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Intent intent = new Intent(context, MainActivity.class);
                intent.putExtra("EXIT_TAG", "SINGLETASK");
                context.startActivity(intent);
            }
        });

        builder.setPositiveButton(context.getResources().getString(R.string.dialog_permission_positive), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                goSetting(context);
            }
        });

        builder.show();
    }

    //去应用手动设置权限
    public static void goSetting(Activity context){
        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        intent.setData(Uri.parse(PACKAGE_URL_SCHEME + context.getPackageName()));
        context.startActivity(intent);
    }
}

最后入过用户不同意则提示用户去设置中打开权限。

申请的代码示例:

  private void goCapture() {
        List<String> strings = new ArrayList<>();
        strings.add(Manifest.permission.READ_EXTERNAL_STORAGE);
        strings.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
        strings.add(Manifest.permission.CAMERA);
        if (CheckPermission.requestPermissions(this, strings, 1)) {
            //已经拥有权限后执行的操作
        }
    }

权限申请的回调如下:

   @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        LogUtil.e("requestCode", "requestCode" + requestCode);
        switch (requestCode) {
            case 1: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //用户同意了权限请求后的操作
                } else {
                    CheckPermission.showMissingPermissionDialog(CreateVideoActivity.this, "相机");
                }
            }
            break;
        }
    }

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-17 12:52:17  更:2021-11-17 12:53:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:45:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码