Android Permissions管理之用户拒绝授权

Android Permissions管理之用户拒绝授权,在Marshmallow之前的安卓版本,应用的权限只需要注册一下,应用就会获取到,在Marshmallow之后,为了安全,全新的权限模型出现,每次使用对应权限的时候,都会弹出 是否让应用获取权限的弹框。如果,用户点击是,给应用授权,那么一切都这样美好的进行就行,如果点击否,拒绝应用的授权,那么一切不美丽的事情就这样开始了,除非用户去设置里面设置给应用权限,那样应用才会正常进行,但是,很遗憾,大部分用户都不会设置这样操作的,繁琐,麻烦。那么解决方案就是每次需要的时候给用户弹出是否给应用授权。

 

代码如下:

 

package com.stylingandroid.permissions;

import android.Manifest;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_CODE = 0;
    private static final String[] PERMISSIONS = new String[]{Manifest.permission.RECORD_AUDIO, Manifest.permission.MODIFY_AUDIO_SETTINGS};
    private PermissionsChecker checker;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        checker = new PermissionsChecker(this);
    }

    @Override
    protected void onResume() {
        super.onResume();

        if (checker.lacksPermissions(PERMISSIONS)) {
            startPermissionsActivity();
        }
    }

    private void startPermissionsActivity() {
        PermissionsActivity.startActivityForResult(this, REQUEST_CODE, PERMISSIONS);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE && resultCode == PermissionsActivity.PERMISSIONS_DENIED) {
            finish();
        }
    }
}

  

 

package com.stylingandroid.permissions;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;

public class PermissionsActivity extends AppCompatActivity {
    public static final int PERMISSIONS_GRANTED = 0;
    public static final int PERMISSIONS_DENIED = 1;

    private static final String EXTRA_PERMISSIONS = "com.stylingandroid.permissions.EXTRA_PERMISSIONS";
    private PermissionsChecker checker;

    public static void startActivityForResult(Activity activity, int requestCode, String... permissions) {
        Intent intent = new Intent(activity, PermissionsActivity.class);
        intent.putExtra(EXTRA_PERMISSIONS, permissions);
        ActivityCompat.startActivityForResult(activity, intent, requestCode, null);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_permissions);

        checker = new PermissionsChecker(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        String[] permissions = getPermissions();

        if (checker.lacksPermissions(permissions)) {
            requestPermissions(permissions);
        } else {
            allPermissionsGranted();
        }
    }

    private String[] getPermissions() {
        return getIntent().getStringArrayExtra(EXTRA_PERMISSIONS);
    }

    private void allPermissionsGranted() {
        setResult(PERMISSIONS_GRANTED);
        finish();
    }

    private void requestPermissions(String... permissions) {
        //NO-OP
    }

}

  

 

package com.stylingandroid.permissions;

import android.content.Context;
import android.content.pm.PackageManager;
import android.support.v4.content.ContextCompat;

class PermissionsChecker {
    private final Context context;

    public PermissionsChecker(Context context) {
        this.context = context;
    }

    public boolean lacksPermissions(String... permissions) {
        for (String permission : permissions) {
            if (lacksPermission(permission)) {
                return true;
            }
        }
        return false;
    }

    private boolean lacksPermission(String permission) {
        return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_DENIED;
    }

}

  

from:https://github.com/StylingAndroid/Permissions

时间: 2024-07-30 03:58:36

Android Permissions管理之用户拒绝授权的相关文章

百度定位权限被拒绝-Android 定位权限被用户拒绝了,如何监听到权限被用户拒绝

问题描述 Android 定位权限被用户拒绝了,如何监听到权限被用户拒绝 Android 定位权限被用户拒绝了,如何监听到权限被用户拒绝? 需求是如果定位权限被用户拒绝了,在用到定位的地方提示用户去开启权限,请问我该如何监听这个权限是否被拒绝? PackageManager pm = getPackageManager(); boolean flag = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permi

android如何跳转到隐私授权或者自启动管理页面

问题描述 android如何跳转到隐私授权或者自启动管理页面 我的app需要在后台运行,为了防止用户在使用系统的一键清理误操作清理掉需要引导用户进入自启管理页面,但是让用户自己去找那个页面并不现实,很多用户是找不到的,而且不同手机这个白名单的位置也不一样,我现在想帮助用户跳转到那个页面.我尝试了"android.settings.PRIVACY_SETTINGS",结果这个跳转到的却是备份与设置 ,有没有做过这方面的引导,请问这种情况我该怎么处理 解决方案 调用以下方法返回一个Inte

Android权限管理原理(含6.0)

前言 Android系统在MarshMallow之前,权限都是在安装的时候授予的,虽然在4.3时,Google就试图在源码里面引入AppOpsManager来达到动态控制权限的目的,但由于不太成熟,在Release版本中都是把这个功能给隐藏掉的.在6.0之后,Google为了简化安装流程且方便用户控制权限,正式引入了runtime-permission,允许用户在运行的时候动态控制权限.对于开发而言就是将targetSdkVersion设置为23,并且在相应的时机动态申请权限,在适配了Andro

详解Android权限管理之Android 6.0运行时权限及解决办法_Android

前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以上设备越来越多了,所以Android 6.0 权限适配是必不可少的工作,这里主要介绍一下我们公司是如何做Android 6.0权限适配的. Android 6.0以下非运行时权限: 根据上面博客我们很清楚的知道,Android的权限其实就是为了程序之间更加的安全的访问,所以权限有等级之分,比如:No

Android权限管理PermissionsDispatcher2.3.2使用+原生6.0权限使用

PermissionsDispatcher2.3.2使用 Android6.0权限官网https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html?hl=zh-cn系统权限:https://developer.android.com/training/permissions/index.html?hl=zh-cn权限的最佳做法:https://developer.android.com/trai

详解Android权限管理之Android 6.0运行时权限及解决办法

前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以上设备越来越多了,所以Android 6.0 权限适配是必不可少的工作,这里主要介绍一下我们公司是如何做Android 6.0权限适配的. Android 6.0以下非运行时权限: 根据上面博客我们很清楚的知道,Android的权限其实就是为了程序之间更加的安全的访问,所以权限有等级之分,比如:No

Android权限管理之Permission权限机制及使用详解_Android

前言: 最近突然喜欢上一句诗:"宠辱不惊,看庭前花开花落:去留无意,望天空云卷云舒." 哈哈~,这个和今天的主题无关,最近只要不学习总觉得生活中少了点什么,所以想着围绕着最近面试过程中讨论比较多的一个知识点Android 6.0 权限适配问题来进行学习,不过我不想直接进入这个主题,所以选择先去了解一下Android的Permission权限机制及使用 Android权限机制: 权限是一种安全机制.Android权限主要用于限制应用程序内部某些具有限制性特性的功能使用以及应用程序之间的组

android 通过GPS获取用户地理位置并监听位置变化

1 Location Manager 管理服务2 Location Provider 提供数据的content provider 方式一:GPS 特点:精度高,耗电量大,不耗费流量 权限<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>方式二:NETWORK 特点:精度低,省电,需要网络访问  权限<uses-permission android:name="an

保证Android应用拥有良好用户体验的三要素

文章描述:用户体验导向的Android应用开发. 文 / 陈彧堃 本文指出"流畅的环境"."友好的体验"和"节省电量"是保证Android应用拥有良好用户体验的三要素. Android开发目前是移动开发中的"当红炸子鸡",大量Java程序员涌向Android,同时会习惯性地将桌面和Web端的开发/设计经验带到移动设备上.这样的好处是充分利用了移动开发和桌面/Web服务的共性,比如广泛使用的列表.本地数据库等常用组件:坏处是移动