`

Android6.0权限封装

阅读更多
简介

Android6.0中对权限分为了一般权限和危险权限。

一般权限:只要在清单文件中注册即可使用。

危险权限:除了要在清单文件中注册外,还要对用户进行请求权限弹窗提醒,才可以使用。

危险权限

关于日历的权限:

<uses-permission android:name="android.permission.READ_CALENDAR"/>
<uses-permission android:name="android.permission.WRITE_CALENDAR"/>


关于相机的权限:

<uses-permission android:name="android.permission.CAMERA"/>


关于联系人的权限:

<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.GET_CONTACTS"/>


关于位置的权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>


关于电话的权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>
<uses-permission android:name="android.permission.USE_SIP"/>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>


关于传感器的权限:

<uses-permission android:name="android.permission.BODY_SENSORS"/>


关于短信的权限:

<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_WAP_PUSH"/>
<uses-permission android:name="android.permission.RECEIVE_MMS"/>
<uses-permission android:name="android.permission.READ_CELL_BROADCASTS"/>


关于SD卡的权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


import android.app.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.util.Log;

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


/**
 * Created by zhoujian on 2017/3/5.
 */

public class BasePermissionsActivity extends Activity
{


    public static final String TAG = "BasePermissionsActivity";

    public static  int REQUEST_CODE = 0;

    public void requestPermission(String[] permissions,int requestCode)
    {

        this.REQUEST_CODE = requestCode;

        //检查权限是否授权
        if(checkPermissions(permissions))
        {
            permissinSucceed(REQUEST_CODE);
        }
        else
        {
            List<String> needPermissions = getPermissions(permissions);
            ActivityCompat.requestPermissions(this, needPermissions.toArray(new String[needPermissions.size()]), REQUEST_CODE);
        }
    }

    private List<String> getPermissions(String[] permissions)
    {
        List<String> permissionList = new ArrayList<>();
        for (String permission : permissions) {
            if (ContextCompat.checkSelfPermission(this, permission) !=
                    PackageManager.PERMISSION_GRANTED ||
                    ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
                permissionList.add(permission);
            }
        }
        return permissionList;

    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);


        if (requestCode == REQUEST_CODE) {
            if (verificationPermissions(grantResults)) {
                permissinSucceed(REQUEST_CODE);
            } else {
                permissionFailing(REQUEST_CODE);
                showFaiingDialog();
            }
        }
    }

    private boolean verificationPermissions(int[] results)
    {

        for (int result : results) {
            if (result != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
        return true;

    }

    /**
     * 检测所有的权限是否都已授权
     *
     * @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(BasePermissionsActivity.this,permission)!= PackageManager.PERMISSION_GRANTED)
            {
                return false;
            }
        }
        return true;
    }


    private void showFaiingDialog()
    {

        new AlertDialog.Builder(this)
                .setTitle("消息")
                .setMessage("当前应用无此权限,该功能暂时无法使用。如若需要,请单击确定按钮进行权限授权!")
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        return;
                    }
                })
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        startSettings();
                    }
                }).show();

    }

    private void startSettings() {

        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        intent.setData(Uri.parse("package:" + getPackageName()));
        startActivity(intent);
    }

    public void permissionFailing(int code) {

        Log.d(TAG, "获取权限失败=" + code);
    }

    public void permissinSucceed(int code) {

        Log.d(TAG, "获取权限成功=" + code);
    }
}


import android.Manifest;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;

public class MainActivity extends BasePermissionsActivity
{

    private Intent intent;
    private Button mTake_phone;
    private Button mTake_photo;

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initViews();
        clickEvents();
    }

    private void initViews()
    {
        mTake_phone = (Button)findViewById(R.id.take_phone);
        mTake_photo = (Button)findViewById(R.id.take_photo);
    }

    private void clickEvents()
    {

        mTake_phone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                requestPermission(new String[]{Manifest.permission.CALL_PHONE},1);
            }
        });


        mTake_photo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                requestPermission(new String[]{Manifest.permission.CAMERA},2);
            }
        });

    }


    /**
     * 权限成功回调函数
     *
     * @param requestCode
     */
    @Override
    public void permissinSucceed(int requestCode) {
        super.permissinSucceed(requestCode);
        switch (requestCode) {
            case 1:
                intent= new Intent(Intent.ACTION_CALL, Uri.parse("tel:15855759639"));
                startActivity(intent);
                break;

            case 2:
                intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                startActivity(intent);
                break;

        }

    }

    @Override
    public void permissionFailing(int code) {
        super.permissionFailing(code);

    }
}


清单文件加上权限

<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.CAMERA"/>
分享到:
评论

相关推荐

    Android6.0权限工具类

    以下是对"Android6.0权限工具类"的详细解释和相关知识点。 1. **运行时权限**:在Android 6.0之前,应用在安装时会自动获得清单文件中声明的所有权限。但在6.0之后,针对如读取联系人、访问位置等敏感权限,应用...

    android 6.0权限申请封装

    以下是一个简单的权限封装示例: ```java public class PermissionUtil { public static void requestPermission(Activity activity, String[] permissions, int requestCode) { if (Build.VERSION.SDK_INT &gt;= ...

    Android6.0权限处理 示例

    在`Android6.0 权限处理.md`文件中,详细记录了这个Demo的实现步骤和代码示例,包括如何初始化RxPermissions,何时何地请求权限,以及如何处理权限结果。而`PermissionHandler`可能是示例代码中的一个关键类,负责...

    Android6.0运行权限封装,一句代码实现

    本文将深入探讨Android 6.0的运行时权限管理,并详细介绍如何通过一句代码实现权限封装,以及添加同意和拒绝授权时的监听回调。 一、Android 6.0运行时权限机制 在Android 6.0之前,用户在安装应用时会一次性授予...

    android6.0权限管理封装demo

    本“android6.0权限管理封装demo”就是针对这一功能的一个示例项目,旨在帮助开发者更好地理解和实施这一新机制。 首先,我们来了解一下Android 6.0权限管理的核心概念。在Android 6.0之前,如果一个应用在安装时...

    Android6.0后权限封装配置

    在Android 6.0(API级别23)之后,系统引入了运行时权限管理机制,对应用程序的权限控制进行了重大改革。之前版本的Android,应用在安装时会一次性请求所有所需的权限,但在Android 6.0及更高版本,用户可以在应用...

    Android6.0权限适配Demo

    `PermissionGen`是Android社区中一个开源的解决方案,它帮助开发者更方便地进行运行时权限的处理和封装。这个项目旨在简化代码,使开发者能够以更优雅的方式处理权限请求,而不是直接使用Android SDK中的`...

    Android6.0运行时权限框架封装

    "Android6.0运行时权限框架封装"是指一种开发策略,它帮助开发者更方便地处理这些新的权限请求。通过封装,开发者可以创建一个通用的库或者模块,简化代码,使得在不同地方请求权限时,只需调用统一的接口即可。这样...

    android6.0动态权限处理

    在Android 6.0(API级别23)及以上版本,系统引入了运行时权限的概念,对用户隐私保护有了更严格的管理。这一变化被称为“动态权限处理”,与之前的静态权限申请方式有着显著的区别。在此,我们将深入探讨这个话题,...

    封装android6.0后权限获取

    本文将详细介绍如何封装Android 6.0后的危险权限获取方法,以确保应用在各种容器环境下正常工作,并在用户拒绝权限后提供合适的提示,同时保持对6.0以下版本的兼容性。 首先,我们需要了解Android 6.0引入的危险...

    Android6.0运行时权限封装

    本文将深入探讨如何封装一个Android 6.0运行时权限的处理机制,以解决用户选择“不再提示”后无法获取权限的问题。 首先,我们需要理解Android 6.0的权限模型。系统现在分为两种权限类型:正常权限(Normal ...

    Android封装之一个类实现兼容Android 6.0权限、适配Android7.0拍照代码

    Android进阶封装之“史无前例"一个类实现兼容Android 6.0权限、适配Android7.0 拍照:http://blog.csdn.net/xh870189248/article/details/77389855

    Android6.0权限检测映射封装

    封装了6.0以后获取权限时的繁琐工作,只需要在需要执行的方法添加注解即可方便的获取权限。

    android 6.0 权限适配Demo

    在Android 6.0(API级别23)及以上版本,系统引入了运行时权限模型,对应用程序的权限管理进行了重大改革。之前,用户在安装应用时一次性授予所有权限,但在Android 6.0中,部分敏感权限需要在运行时由用户动态授权...

    带android 6.0权限的图片选择器

    这个“带Android 6.0权限的图片选择器”正是针对这一变化而设计的解决方案。 在Android 6.0之前,应用程序在安装时会一次性获取所有所需权限。然而,为了提高用户对应用权限的控制,Android 6.0引入了运行时权限...

    Android 6.0权限申请详解及权限资料整理

    在Android 6.0(API级别23)及以上版本,权限管理系统发生了重大变化,引入了运行时权限的概念。在此之前,应用程序在安装时一次性获取所有声明的权限,而在Android 6.0之后,对于某些敏感权限,如访问联系人、...

    Android 6.0运行时权限处理与封装(一)

    这篇博客“Android 6.0运行时权限处理与封装(一)”深入探讨了这个重要的话题,下面将详细阐述相关知识点。 一、运行时权限简介 在Android 6.0之前,应用在安装时会一次性获取所有所需权限,而运行时权限模式改变...

    Android6.0

    这个压缩包文件包含了与Android 6.0权限管理和封装相关的资源,包括`android6.0权限使用PermissionGen依赖库.7z`和`android6.0permission封装`,这将帮助我们深入理解如何在Android 6.0及更高版本中高效地处理权限。...

    Android-android6.0权限兼容库

    PermissionManager是一个对android6.0运行时申请权限的操作的封装,将重复调用的多个方法组合封装在一起,方便调用,简化代码和逻辑。PermissionManager的使用比较简单。

    Android 6.0运行时权限封装

    本文将详细探讨Android 6.0运行时权限的封装及其应用。 首先,理解运行时权限的重要性。在之前的Android版本中,用户在安装应用时会被询问是否接受应用的所有权限,一旦接受,应用在整个生命周期内都可以访问这些...

Global site tag (gtag.js) - Google Analytics