android应用RxPermissions申请权限依赖添加方法和使用代码

news/2024/11/29 4:48:37/

android应用RxPermissions申请权限依赖添加方法和使用代码

  1. 环境:Android Studio2021.2,java
  2. 添加依赖:
    打开build.gradle(app),添加以下代码:
    implementation 'com.github.tbruyelle:rxpermissions:0.12'
//rxJava 注意:这里必须是rxJava3,其它不行,反正我搞了半天api 'io.reactivex.rxjava3:rxjava:3.0.4'api 'io.reactivex.rxjava3:rxandroid:3.0.0'

打开settings.gradle添加以下代码
加入前:

dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {google()mavenCentral()}
}

加入后

dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {google()mavenCentral()maven {url 'https://jitpack.io'}}
}

3.以下代码参考网上代码编写,如涉版权,即刻删除:
activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:id="@+id/onclick_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="权限"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java:

package com.example.rxpermissons;import androidx.appcompat.app.AppCompatActivity;import android.Manifest;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;import com.tbruyelle.rxpermissions3.Permission;
import com.tbruyelle.rxpermissions3.RxPermissions;import java.util.concurrent.TimeUnit;import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.functions.Consumer;public class MainActivity extends AppCompatActivity {
private RxPermissions rxPermissions;
private Context context;private static final String[] permissionsGroup = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.READ_CALENDAR,Manifest.permission.CAMERA};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.onclick_tv).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {testEnsureEachCombined(v);}});}public void testRequest(View view) {
//        创建 RxPermissions 实例RxPermissions rxPermissions = new RxPermissions(this);rxPermissions.request(permissionsGroup).subscribe(new Observer<Boolean>() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onNext(Boolean aBoolean) {if (aBoolean) {Toast.makeText(MainActivity.this, "已获取权限,可以干想干的咯", Toast.LENGTH_LONG).show();} else {//只有用户拒绝开启权限,且选了不再提示时,才会走这里,否则会一直请求开启Toast.makeText(MainActivity.this, "主人,我被禁止啦,去设置权限设置那把我打开哟", Toast.LENGTH_LONG).show();}}@Overridepublic void onError(Throwable e) {}@Overridepublic void onComplete() {}});}public void testEnsureEachCombined(View view) {RxPermissions rxPermissions = new RxPermissions(this);Observable.timer(10, TimeUnit.MILLISECONDS).compose(rxPermissions.ensureEachCombined(permissionsGroup)).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Permission>() {@Overridepublic void accept(Permission permission) throws Throwable {Log.i("cxw", "权限名称:" + permission.name + ",申请结果:" + permission.granted);}});}
}

4.运行结果:
运行后点击权限按钮,显示下图:
在这里插入图片描述
5.源码链接:https://download.csdn.net/download/xyufeng2008/87219396


http://www.ppmy.cn/news/676591.html

相关文章

解决m1的mac下 执行flutter pub run ffigen 出现“(have ‘arm64’, need ‘x86_64’)“错误

解决m1的mac下 执行flutter pub run ffigen 出现"(have ‘arm64’, need ‘x86_64’)"错误 ffigen主要是用来将底层的c/c的导出函数转成dart能方便调用的方法&#xff0c;用起来挺方便的&#xff0c;之前在windows弄成功过&#xff0c;现在在要在m1的mac下再弄一次&…

指数形式的傅里叶级数

傅里叶提出的两个重要的观点&#xff1a; 1.周期信号都可以表示为谐波关系的正弦信号的加权和&#xff08;傅里叶级数&#xff09; 2.非周期信号都可用正弦信号的加权积分表示&#xff08;傅里叶变换&#xff09; 参考上一篇博客 https://blog.csdn.net/Chevy_cxw/article/det…

SQL慢?吐血整理MySQL中Explain分析工具

前言 当我们遇到一条SQL慢的时候&#xff0c;往往需要使用一些性能分析工具&#xff0c;看看这个SQL究竟是为什么慢&#xff1f;那本文就分享MySQL中的一个性能分析神器——Explain, 通过读懂它的结果&#xff0c;我们可以知道SQL的执行计划&#xff0c;也就是具体执行查询的方…

在ubuntu16.04下安装opencv3.4.5(超详细)

一、编译安装 1.官网下载sources版本(For Linux)&#xff1a;http://opencv.org/releases.html 2.解压&#xff1a; unzip opencv-3.4.5.zip3.进入&#xff1a; cd opencv-3.4.5&#xff08;如果安装的文件在本机上&#xff0c;则先进入此安装包所在路径&#xff0c;比如我的…

keras 搭建lstm+dnn网络 多步时间序列预测 模板

# -*- coding: utf-8 -*- # 导入库pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn import metrics from sklearn.metrics import mean_square…

SpingData-JDBC(看这篇文章就够了,新手入门指引)

JdbcTemplate 的基本使用 写在前面&#xff1a; 当DDL操作时&#xff0c;一般是用execute方法&#xff0c;这也是一种规范吧&#xff0c;这个也可以运行DML但是通常来说我DML操作是需要返回值的&#xff0c;一般就是返回影响的行数。然后这篇文章主要介绍增删改查&#xff0c…

什么是天线轴比

天线的轴比定义&#xff1a;任意极化波的瞬时电场矢量的端点轨迹为一椭圆&#xff0c;椭圆的长轴2A和短轴2B。 椭圆极化波的特性可用三个参数来描述&#xff0c;即旋转方向、椭圆极化轴比及椭圆的倾角&#xff0c;其中轴比是椭圆长轴与短轴之比。椭圆极化当轴比为无穷大时&…

宽窄带天线的区别w

窄带和宽带的区分也就是相对带宽的大小Br(fh-fl)/f0*100%&#xff0c;一般相对带宽小于1%的为窄带天线&#xff0c;1%至25%的为宽带天线&#xff0c;大于25%的为超宽带天线