Android动态权限申请的简单使用(permissionsdispatcher)

医学图像处理入门:如何用Python将CT灰度图转换为伪彩色图像(附代码) 本文详细介绍了如何使用Python将CT灰度图转换为伪彩色图像,提升医学图像的可读性和诊断效率。通过OpenCV和Matplotlib等工具,实现灰度值到彩色空间的映射,特别适用于突出显示特定组织密度差异。文章包含完整代码示例和临床实用技巧,适合医学影像分析初学者和Python开发者。 阅读详情

Android对6.0及以上的版本做了更强的权限控制。如打电话这种需要动态申请。我推荐使用github上start最多的PermissionsDispatcher作为权限管理。

github地址为:https://github.com/permissions-dispatcher/PermissionsDispatcher

1,在build.gradle中做如下代码1--4步骤所示配置。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.mumu.jspermissions"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

//1,增加jitpack支持
allprojects {
    repositories {
        maven { url "https://jitpack.io" }
        maven { url "https://maven.google.com" }
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    //2,butterKnife
    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    //3,自己封装的弹窗
    implementation 'com.github.mamumu:MMAlertDialog:10'

    //4,permissionsdispatcher权限
    implementation'com.github.hotchemi:permissionsdispatcher:3.1.0'
    annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:3.1.0'
}

2,在AndroidManifest.xml中添加对应的权限,我demo中只是用拨打电话的权限,如果需要其他权限,都要先在这添加上。

//拨打电话的权限
    <uses-permission android:name="android.permission.CALL_PHONE" />

 

3,前面1和2步骤完成了基本配置,核心6步来了。详情看下图和代码中注释。注意,被权限注解的方法不能用private修饰。

package com.mumu.jspermissions;

import android.Manifest;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;
import android.widget.Toast;

import com.mumu.alertdialog.MMAlertDialogUtils;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import permissions.dispatcher.NeedsPermission;
import permissions.dispatcher.OnNeverAskAgain;
import permissions.dispatcher.OnPermissionDenied;
import permissions.dispatcher.OnShowRationale;
import permissions.dispatcher.PermissionRequest;
import permissions.dispatcher.RuntimePermissions;

/**
 * @author : zlf
 * date   : 2019/1/22
 * blog   :https://www.jianshu.com/u/281e9668a5a6
 * 1,在需要动态申请权限的类上添加 @RuntimePermissions 的注解
 */
@RuntimePermissions
public class MainActivity extends AppCompatActivity {

    @BindView(R.id.btn1)
    Button btn1;
    //是否已经授权
    private boolean isAllowPermissions = false;

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

    @OnClick(R.id.btn1)
    public void onViewClicked() {
        showDialog2();
    }

    /**
     * 拨打电话的弹窗
     */
    private void showDialog2() {
        MMAlertDialogUtils.showDialog(this,
                "客服电话",
                "10086",
                "取消",
                "呼叫",
                false,
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();
                        dialog.dismiss();
                    }
                },
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //拨号方法
                        if (!isAllowPermissions) {
                            MainActivityPermissionsDispatcher.callPhoneWithPermissionCheck(MainActivity.this);
                        } else {
                            callPhone();
                        }
                        dialog.dismiss();
                    }
                });
    }

    /**
     * 2,拨打电话需要CALL_PHONE权限,在对应的方法是标明
     */
    @NeedsPermission(Manifest.permission.CALL_PHONE)
    void callPhone() {
        isAllowPermissions = true;
        Intent intent = new Intent(Intent.ACTION_CALL);
        Uri data = Uri.parse("tel:10086");
        intent.setData(data);
        startActivity(intent);
    }

    /**
     *,3,对需要该权限的解释
     */
    @OnShowRationale(Manifest.permission.CALL_PHONE)
    void showWhy(final PermissionRequest request) {
        MMAlertDialogUtils.showDialog(this,
                "提示",
                "我们需要拨打电话权限,否则不能拨打电话",
                "取消",
                "授权",
                false,
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        request.cancel();
                        dialog.dismiss();
                    }
                },
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        request.proceed();
                        dialog.dismiss();
                    }
                });
    }

    /**
     *,4,当用户拒绝获取权限的提示
     */
    @OnPermissionDenied(Manifest.permission.CALL_PHONE)
    void showDenied() {
        Toast.makeText(MainActivity.this, "无法获得权限", Toast.LENGTH_SHORT).show();
    }

    /**
     *,5,当用户勾选不再提示并且拒绝的时候调用的方法
     */
    @OnNeverAskAgain(Manifest.permission.CALL_PHONE)
    void showNeverAskAgain() {
        MMAlertDialogUtils.showDialog(MainActivity.this,
                "权限设置提示",
                "应用权限被拒绝,为了不影响您的正常使用,请在 权限 中开启对应权限",
                "取消",
                "进入设置",
                false,
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                },
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //引导用户至设置页手动授权
                        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                        Uri uri = Uri.fromParts("package", MainActivity.this.getPackageName(), null);
                        intent.setData(uri);
                        startActivity(intent);
                        dialog.dismiss();
                    }
                });
    }

    /**
     *,6,权限回调,调用PermissionsDispatcher的回调方法
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        MainActivityPermissionsDispatcher.onRequestPermissionsResult(MainActivity.this, requestCode, grantResults);
    }
}

4,MainActivityPermissionsDispatcher类需要如下图操作才可以对应生成,规则是当前类名+PermissionsDispatcher。

 

基于 STM32 的智能水表流量计设计与实现 —— 数据采集与远程传输 本文设计的基于 STM32 的智能水表流量计通过霍尔传感器实现流量采集,结合 STM32 的处理能力完成数据计算、存储与远程传输,具备计量精准、功耗低、可远程监控等特点。未来可优化方向:引入低功耗模式延长电池寿命,增加水质检测模块实现多参数监测,提升水务管理智能化水平。 阅读详情

相关推荐

VMware + ubuntu20.04 + qemu安装

遇到报错可参考:(从ubuntu裸系统开始安装)

NosONE 3230

Android权限相关(检查、申请、回调)

最近要整理个老项目,权限那块需要改,就回顾了下权限相关的,在此整理下。 这里用到的是 permissionsdispatcher 下面是简单的使用,详细的去看 1、先检查下 build.gradle 中是否有 apply plugin: "kotlin-kapt" 这句话,没有的话再顶部加上; 2、添加依赖 implementation "org.permissionsdispatcher:permissionsdispatcher:4.5.0" kapt "org.permissionsdispatch

u014620028的专栏 3093

告别虚拟机!在WSL2的Ubuntu里5分钟跑通LVGL v9.2图形界面(附SDL2配置避坑)

本文详细介绍了如何在WSL2的Ubuntu子系统中快速配置LVGL v9.2图形库的SDL2模拟环境,帮助嵌入式开发者在5分钟内跑通第一个图形界面示例。通过WSL2和VSCode的远程开发插件,实现Windows系统下无缝使用Linux工具链,大幅提升开发效率。

weixin_28736335的博客 425

PermissionsDispatcher使用

首先添加依赖 compile 'com.github.hotchemi:permissionsdispatcher:4.6.0' annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:4.6.0' 注解列表 @RuntimePermissions注解:用于标注在需要申请权限的Activity或Fragme...

yuqingsen的博客 619

利用NURBS曲线进行点云曲面拟合算法

点云拟合曲面算法是将点云数据拟合成一个二次或高次曲面模型的算法。这种算法主要用于三维模型重建、计算机视觉、机器人感知、医学图像处理等领域。最小二乘法(Least Squares Method):通过最小化点到曲面距离的平方和来拟合曲面模型。三角剖分算法(Triangulation-Based Method):将点云构建成三角网格,再拟合成曲面模型。隐式曲面算法(Implicit Surface Method):通过定义一个隐式函数来表示曲面,然后用点云数据来估计隐式函数的系数。

weixin_44770969的博客 1万+

DDR5内存设计实战:如何通过CA_ODT引脚优化信号完整性(附配置示例)

本文深入探讨DDR5内存设计中CA_ODT引脚的配置与优化策略,通过Group A/Group B分组控制提升信号完整性。详细解析了ODT机制、PCB布局要点及寄存器配置方法,并附实战案例与配置示例,帮助工程师解决高速信号传输中的反射问题,确保DDR5系统稳定运行。

weixin_29202213的博客 398

运行时权限请求框架PermissionsDispatcher

概述我们上一篇博客讲了Android6.0运行权限,而Android给我们提供了很多运行时权限请求框架的,我们这篇博客就来讲一下PermissionsDispatcher的使用。PermissionsDispatcher是基于注解来写的库,原理就是你给你写的方法加一个注解,然后在适当的时机调用这个被注解的方法。集成方式首先,我们需要在工程项目的build.gradle中添加:dependencie...

wen_haha的博客 3774

理解ADC:为什么需要抗混叠滤波器?

本文介绍 ADC 的混叠现象,引出抗混叠滤波器,并介绍一种开关电容滤波器,它具有很小的增益过渡带。

疯狂的运放 5938

Android 开源大集合

1、free-programming-books https://github.com/vhf/free-programming-books 这个项目目前 star 数排名 GitHub 第三,总 star 数超过6w,这个项目整理了所有跟编程相关的免费书籍,而且全球多国语言版的都有,,有了这个项目,理论上你可以获取任何编程相关的学习资料,强烈推荐给你们! oh-my-zsh

柳的博客 472

dbt+Snowflake实战:数据建模、权限隔离与性能优化全指南

dbt(data build tool)作为现代数据栈的核心建模工具,其与Snowflake的深度协同远不止于SQL编译执行——它本质是将软件工程实践(如版本控制、测试驱动、CI/CD)注入数据交付流程。理解dbt的声明式建模原理与Snowflake的虚拟仓库、Time Travel、TRANSIENT表、聚簇键等底层机制如何咬合,是实现可维护、可审计、低成本数据产品交付的关键。本文聚焦dbt在Snowflake环境中的真实落地挑战,涵盖schema与warehouse的物理映射设计、role级硬隔离策略、

weixin_34389926的博客 312

塔石DTU通过MQTT传递数据教程

塔石通过MQTT通讯上传ADL400电表用电量。

renkai721的专栏 252

动态权限框架:PermissionsDispatcher

Android 框架 动态权限框架:permissionsdispatcher1. 报错如下:Generated onRequestPermissionsResult method not called2. 编译项目报错:Error: Program type already present: android.support.v13.view.DragStartHelper$OnDragStart...

初心一点的专栏 2486

基于FPGA的数字信号处理(11)--定点数的舍入模式(2)向最临近值取整nearest

基于FPGA的数字信号处理(11)--定点数的舍入模式(2)向最临近值取整nearest

孤独的单刀 5474

android动态权限申请回调,Android动态权限申请的简单使用(permissionsdispatcher)

Android对6.0及以上的版本做了更强的权限控制。如打电话这种需要动态申请。我推荐使用github上start最多的PermissionsDispatcher作为权限管理。说明:一,使用的Androidstudio版本为3.2.1二,使用的permissionsdispatcher版本为3.1.0展示效果:jsPremissions1.gifjsPremissions2.gif现在正式开始1,...

weixin_42350411的博客 1173

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

安卓权限申请框架PermissionsDispatcher使用

安卓动态权限申请库PermissionsDispatcher使用 动态权限申请库https://github.com/permissions-dispatcher/PermissionsDispatcher 安卓6.0之前的系统,应用权限会在应用被安装的时候以列表的形式列出,用户可以看到那些权限被申请了,也可以选择性的关闭权限,6.0之后系统在应用安装时,不采取这种方式来申请权限,对于一般的没...

u012237341的博客 4997

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android 向用户申请权限-适配的PermissionsDispatcher简单使用

动态权限之前一直使用自己封装的,还有RxPermission和EasyPermission,今天简单尝试下PermissionsDispatcher 引入 implementation "org.permissionsdispatcher:permissionsdispatcher:4.5.0" annotationProcessor "org.permissionsdispatcher:permissionsdispatcher-processor:4.5.0" 使用的Activity上加上注解

h471507602的博客 863

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Android动态权限管理框架PermissionsDispatcher使用介绍

对于动态权限,大家应该都不陌生了,在Android6.0版本加入了动态权限的概念,在Android 6.0之前申明权限只需要在AndroidManifest清单中注册相应权限就可以;Android 6.0以上系统就需要根据权限的等级(普通权限和危险权限)进行权限注册,如果是普通权限还是依照之前的处理方式直接在AndroidManifest清单中注册即可,但是危险权限不仅需要在AndroidMani...

倚栏静望的博客 3207

6.0权限适配的PermissionsDispatcher简单使用

动态权限之前一直使用自己封装的,还有RxPermission和EasyPermission,今天简单尝试下PermissionsDispatcher 引入 implementation "org.permissionsdispatcher:permissionsdispatcher:4.5.0" annotationProcessor "org.permissionsdispatcher:perm...

倒骑驴走着瞧的博客 2413

PermissionsDispatcher动态权限申请

Android对6.0及以上的版本做了更强的权限控制。如打电话这种需要动态申请。我推荐使用github上start最多的PermissionsDispatcher作为权限管理。 一,使用的Androidstudio版本为3.5.3 二,使用的permissionsdispatcher版本为3.2.0 github地址为:https://github.com/permissions-dispa...

慕涵的博客 1627

Android kotlin的动态权限管理,开源库permissionsdispatcher的简单使用

Android 对6.0及以上的版本做了更强的权限控制,如打电话,拍照读取文件等都需要动态的申请权限,这个开源库挺好用的,记录一下使用permissionsdispatcher,是基于注解开发的 GitHub地址 使用步骤:Kotlin使用 1.在build.gradle中添加如下代码 kapt "org.permissionsdispatcher:permissionsdispatcher-processor:4.2.0" 2.AndroidManifest.xml中添加相关权限 //拨打电话权限 &l

qq_44977215的博客 1737

Kotlin动态权限permissionsdispatcher

//动态权限 implementation('com.github.hotchemi:permissionsdispatcher:3.1.0') kapt 'com.github.hotchemi:permissionsdispatcher-processor:3.1.0' github:https://github.com/permissions-dispatcher/Permissions...

fayangzhou的博客 1809

动态申请 相机权限

希望本文对你有所启发,有任何面试上的建议也欢迎留言分享给大家。好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。好了~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。

2401_84132589的博客 1008

PermissionsDispatcher插件终极指南:Android权限管理的简单解决方案

PermissionsDispatcher插件是一款专为Android开发者设计的IntelliJ插件,它通过注解的方式简化了Android运行时权限的处理流程。作为Android权限管理的终极工具,这个插件能够让你告别繁琐的手动权限申请代码,大幅提升开发效率。🚀 ## 为什么需要PermissionsDispatcher? 在Android 6.0(API 23)之后,Google引入了运

gitblog_00967的博客 1094

Android权限处理--Permissionsdispatcher

1. @RuntimePermissions Android权限常识(来源于Google官方文档) 如果设备运行的是 Android 6.0(API 级别 23)或更高版本,并且应用的 targetSdkVersion 是 23 或更高版本,则应用在运行时向用户请求权限。用户可随时调用权限,因此应用在每次运行时均需检查自身是否具备所需的权限。 如果设备运行的是 Androi...

树叶的博客 1944

使用PermissionsDispatcher动态获取权限

使用PermissionsDispatcher动态获取权限插件具体注解解析添加依赖 详细的文章:https://blog.csdn.net/s13383754499/article/details/79034758 emmmmmmm,今天的项目里面有动态获取权限,so,就记录今天我学到的关于动态获取权限的知识点。 android6.0有一个动态获取权限框架PermissionDispatcher。...

weixin_39755659的博客 475

Android 动态申请权限框架

文章目录导包需要配置例如请求位置权限 导包 该库需要 RxJava implementation 'com.github.tbruyelle:rxpermissions:0.12' implementation "io.reactivex.rxjava3:rxjava:3.0.4" 需要配置 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility

csdn1225987336的专栏 1089
上一篇: MD5签名写入该空白包中
下一篇: OkGo的详解
code_dream_wq
博客等级 码龄10年 51粉丝 199原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值