-
2021-06-08 02:16:55
【实例简介】
添加要请求的权限数组
builder.addPermissions(new String[]{Manifest.permission.CAMERA});
设置弹出框,当shouldShowRequestPermissionRationale() 返回true的时候,即用户已经拒绝了一次,给用户提示一个解释信息,为什么需要这个权限
builder.addPermissionRationale("say why need the permission");
添加回调方法
builder.addRequestPermissionsCallBack(new OnRequestPermissionsCallBack() {
@Override
public void onGrant() {
//do something
}
@Override
public void onDenied(String permission) {
Log.e(TAG, permission "Denied");
}
})
开始请求权限
builder.build().request();
【实例截图】
【核心代码】
更多相关内容 -
Android http网络请求设置以及设置网络权限
2022-02-23 21:39:05http网络请求设置以及设置网络权限在project下
(一)HTTP网络请求设置:
第一步:
在res的xml目录下,新建一个xml文件,名称:network_security_config.xml
在“network_security_config.xml”中添加代码
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
第二步:
AndroidManifest.xml文件中添加
android:networkSecurityConfig="@xml/network_security_config"
(二)网络权限:
在AndroidManifest.xml添加代码
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
-
Android中的权限请求
2021-11-10 15:07:39目录Android中的权限请求Android中权限分类Android中的动态权限概述分类...一般为那种请求数据和资源的权限,比如网络请求权限。一般不告知用户,用户也不能撤销这类权限。在Manifest中申请。 危险权限 一般设计目录
不积跬步,无以至千里;不积小流,无以成江海。要沉下心来,诗和远方的路费真的很贵!
参考博客:小胡老师的博客
Android中的权限请求
在
Android 6.0
以后,Android
中添加了动态请求权限。Android中权限分类
- 普通权限
一般为那种请求数据和资源的权限,比如网络请求权限。一般不告知用户,用户也不能撤销这类权限。在
Manifest
中申请。- 危险权限
一般设计到用户隐私的权限,即为危险权限,需要动态请求。
- 特殊权限
一般对于系统的弹窗之类的权限。
Android中的动态权限
概述
在
Android 6.0
以后,申请危险权限,不仅要在Manifest
中声明,还要调用官方提供的API主动申请。分类
总共分为9组,每一组中的一个权限申请成功,那么整组的权限都可以使用。
- 访问通讯录——
android.permission-group.CONTACTS
- 电话——
android.permission-group.PHONE
- 日历信息——
android.permission-group.CALENDAR
- 相机权限——
android.permission-group.CAMERA
- 传感器——
android.permission-group.SENSORS
- 地理位置——
android.permission-group.LOCATION
- 存储卡——
android.permission-group.STORAGE
- 多媒体——
android.permission-group.MICROPHONE
- SMS——
android.permission-group.SMS
请求方法
官方提供的API
步骤
- 在
Manifest
文件中声明需要申请的权限 - 判断当前的版本是否符合(大于等于
Android 6.0
) - 判断权限是否已经被授权
- 已授权,不再操作权限
- 未授权,进行权限申请
- 用户操作后,提示权限是否开启成功
代码
- 声明权限
如果对于这类危险权限的申请,没有在
Manifest
中声明,那么就会默认不授权,并不会弹窗给用户选择。<!-- 在外部存储设备中写入和修改数据 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
- 逻辑代码
public class MainActivity extends AppCompatActivity { private static final int REQUEST_CODE = 1; private static String[] PERMISSIONS_STORAGE = {"android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //android版本在6.0以上 if (Build.VERSION.SDK_INT >= 23) { System.out.println("版本正确"); checkPermission(); }else { System.out.println("版本过低"); } } private void checkPermission() { //权限是否已经赋予 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //未赋予权限,申请权限 if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission .WRITE_EXTERNAL_STORAGE)) { //选择不开启权限的时候,提示用户 Toast.makeText(this, "请开通相关权限,否则无法正常使用本应用!", Toast.LENGTH_SHORT).show(); } //申请权限 ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, REQUEST_CODE); } else { //权限已赋予 Toast.makeText(this, "已授权成功!", Toast.LENGTH_SHORT).show(); } } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { //权限的申请结果返回 case REQUEST_CODE: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { //已授权 Toast.makeText(this, "授权成功!", Toast.LENGTH_SHORT).show(); } else { //未授权 Toast.makeText(this, "授权被拒绝!", Toast.LENGTH_SHORT).show(); } } } } }
RxPermissions框架
RxPermissions
可以简化获取权限的操作,而且内部也自动帮我们判断了版本是否需要申请权限。同时结合RxJava
回调结果。使用
RxPermissions
框架的最小SDK
版本要大于等于14。引入依赖库
allprojects { repositories { ... maven { url 'https://jitpack.io' } } } dependencies { implementation 'com.github.tbruyelle:rxpermissions:0.10.2' implementation 'io.reactivex.rxjava2:rxjava:2.0.1' implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' }
声明权限
危险权限的申请需要在
Manifest
文件中声明。<!--相机--> <uses-permission android:name="android.permission.CAMERA" />
申请单个权限
//初始化RxPermissions框架 RxPermissions permissions = new RxPermissions(this); //申请权限 permissions.request(Manifest.permission.CAMERA) .subscribe(new Consumer<Boolean>() { //RxJava的观察者模式 @Override public void accept(Boolean aBoolean) { if (aBoolean ) { //接受 Toast.makeText(MainActivity.this, "授权成功!", Toast.LENGTH_SHORT).show(); }else { //拒绝 Toast.makeText(MainActivity.this, "授权失败!", Toast.LENGTH_SHORT).show(); } } });
申请多个权限
- 和申请单个权限没区别,增加一下权限的种类即可。
//初始化RxPermissions框架 RxPermissions permissions = new RxPermissions(this); //申请权限 permissions.request(Manifest.permission.CAMERA,Manifest.permission.WRITE_CALL_LOG) .subscribe(new Consumer<Boolean>() { //RxJava的观察者模式 @Override public void accept(Boolean aBoolean) { if (aBoolean ) { //接受 Toast.makeText(MainActivity.this, "授权成功!", Toast.LENGTH_SHORT).show(); }else { //拒绝 Toast.makeText(MainActivity.this, "授权失败!", Toast.LENGTH_SHORT).show(); } } });
AndPermission
引入依赖库
implementation 'com.yanzhenjie:permission:2.0.3'
语法
申请权限(单个或多个)
//直接使用框架 AndPermission.with(this) .runtime() .permission(Permission.WRITE_EXTERNAL_STORAGE,Permission.CAMERA) //接受 .onGranted(permissions -> { Toast.makeText(MainActivity.this, "授权成功!", Toast.LENGTH_SHORT).show(); }) //拒绝 .onDenied(permissions -> { Toast.makeText(MainActivity.this, "授权失败!", Toast.LENGTH_SHORT).show(); }) //启动方法 .start();
总结
Android 6.0
之前,所有权限在Manifest
文件中声明赋予,用户无权操作;Android 6.0
之后,用户可以选择是否授予权限。- 对于普通权限,无论版本,都在
Manifest
文件中声明即可使用。 - 对于危险权限,
Android 6.0
之后,需要用户同意赋予,才可使用,保护用户隐私。 - 危险权限在申请之前,一定要在
Manifest
文件中声明,否则会出现错误或者出现无法授权的情况。
-
Android 网络权限配置
2019-04-20 01:02:23NULL 博文链接:https://fallingautumn.iteye.com/blog/1705587 -
安卓请求权限
2021-06-06 18:01:18有时候我们的应用需要读写sd卡,就需要android.permission.WRITE_EXTERNAL_...以下就以Mainfest.permission.WRITE_EXTERNAL_STORAGE为例,1)检测是否拥有权限image.png2)如果没有权限就请求权限image.pngreque...有时候我们的应用需要读写sd卡,就需要android.permission.WRITE_EXTERNAL_STORAGE权限,但是它属于危险型权限。光在Manifest中配置还不够,你还需要运行时请求去用它们。
以下就以Mainfest.permission.WRITE_EXTERNAL_STORAGE为例,
1)检测是否拥有权限
image.png
2)如果没有权限就请求权限
image.png
requestPermission()是个异步请求方法,调用它之后,Android会弹出系统权限授权对话框要求用户反馈。
为响应用户操作,还需要重写onRequestPermissionResult()响应方法,用户点击 允许 或 拒绝 按钮后,Android就会调用这个方法。
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case 0: { //这个0是requestCode,上面requestPermissions有用到
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getActivity(), "已获取权限,可以保存图片", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getActivity(), "您拒绝了写文件权限,无法保存图片", Toast.LENGTH_SHORT).show();
}
return;
}
}
}
然后我们在这个方法里检测是否拥有权限,如果有权限,就...。
如果你点击了 允许 按钮给予权限,除非卸载或关闭权限,应用会一直拥有该权限。如果选了拒绝,应用的授权只是暂时被否。下次要获取读写文件的话,可以继续用requestPermission()来请求权限。
-
Android 6.0 权限 动态注册 请求多个权限
2018-03-23 08:49:55Android 6.0 权限 动态注册权限 一次请求多个权限。非第三方库,源码。 -
XXPermissions:Android 权限请求框架,已适配 Android 11
2021-05-12 09:54:10权限请求框架 码云地址: 博文地址: 点击此处 进行演示或者测试 另外想对 Android 6.0 权限需要深入了解的,可以看这篇文章 集成步骤 在项目根目录下的 build.gradle 文件中加入 buildscript { ...... } ... -
Android请求网络权限
2016-11-01 18:31:00uses-permission android:name="android.permission.INTERNET"/> 如果不添加这一句,那么在运行时候会像下面这样 2,在layout界面中添加一个WebView控件 <WebView android:layout_... -
Android 权限动态请求
2022-02-17 21:32:51在Android M版本以后,权限就没办法Manifest声明就万事了,还需要动态请求。 网上已经有不少例子,不过这里还是做一个简单的activity,把动态请求的方法,完整的实现一下,基本可以复制粘贴使用。 首先,manifest... -
对Android 系统所有危险权限手动申请演示、retrofit2网络请求、百度定位使用。
2021-06-28 11:27:45有定位权限-百度定位功能、联系人打电话、相机权限、retrofit2网络请求、百度定位使用等 -
Android请求权限
2021-01-19 11:47:07安卓系统权限分为两类:正常权限和危险权限。正常权限不会给用户隐私带来风险,只需在 AndroidManifest.xml 清单中列出该权限,系统将自动授予该权限。 而危险权限会授予应用访问用户数据,你首先要在清单中列出,... -
安卓9.0后网络权限的请求
2021-03-21 18:58:47安卓9.0后在配置文件中添加上android.permission.INTERNET的权限后依然使用网络请求数据,这是因为android9.0默认不支持http。 文章目录安卓9.0后网络权限的请求一、添加网格请求的文件二、在清单配置文件添加配置 ... -
用于请求权限的Android库(已更新27.11.2017)-Android开发
2021-05-26 11:39:51NoPermission简单的Android库,用于权限请求。 仅由一类组成。 为什么使用NoPermission:不是框架。 这只是一个类对话框,其中解释了为什么应用程序需要permi NoPermission简单Android库来进行权限请求。 仅由一类... -
Android 权限请求处理
2021-06-06 18:26:55前言在Android6.0之前,安卓手机安装App时会列出安装App的访问权限并一旦同意安装,则一次性授权列出的访问权限,导致开发者可以在用户毫不知情的情况下访问权限...例如:如何请求相机权限每次请求权限后,会弹出系... -
Android 发送简单的网络请求
2021-05-27 08:28:20RequestQueue管理用来执行网络操作的工作线程,从缓存中读取数据,写数据到缓存,并解析 Http 的响应内容。请求解析原始的响应数据,Volley 会把解析完的响应数据分发给主线程。这节课会介绍如何使用Volley.... -
Kotlin库,可帮助请求Android中的运行时权限。-Android开发
2021-05-26 10:35:51KPermissions一个完全用Kotlin编写的Android库,可帮助请求运行时权限。 该库在不存在运行时权限的Android M(API 23)下也兼容,因此您无需处理KPermissions完全用Kotlin编写的可帮助请求运行时权限的Android库。 ... -
Flutter之请求权限(适配android)
2021-06-08 02:16:54Flutter之请求权限(适配android)导入第三方包simple_permissions: ^0.1.9官方文档Android的修改如果当前应用没有使用androidx引入v4包即可,代码无需修改如果使用了androidx则需要引入androidx的包,需要修改代码... -
Unity Android动态请求权限
2021-08-27 16:45:21在 Android 6(API 级别 23)及更高版本上,Android.Permission API 要求在需要时,动态请求使用某些常用系统功能(例如相机、麦克风或位置)的权限,而不是在应用程序启动时立即请求权限。 Unity的Android版本,... -
Android动态权限请求类
2022-03-14 11:18:43Android动态权限请求类, 例: PermissionUtil.requirePermissions(MainActivity.this,PermissionUtil.PERMISSION_TYPE_IMPORTANT, new PermissionUtil.RequirePermissionDialogListener() {@Overridepublic void ... -
一个简单的库,可使用Kotlin Coroutines轻松在Android中请求权限。-Android开发
2021-05-26 12:18:43权限流一个简单的库,可使用Kotlin Coroutines在Android中轻松请求权限。 Setup Gradle:将以下代码行添加到模块(应用程序)级gradle文件implem权限流一个简单的库,可使用Kotlin Coroutines在Android中轻松请求... -
『Android』网络请求数据与JSON解析
2022-04-30 19:27:30既然需要访问网络自然需要网络请求权限 除此之外还需要加上这一行,否则http的网页请求不成功 这段代码是网络请求数据,这是老师提前发在网上的数据文件,可通过这个网址访问,其中的数据是: 将这段代码放在主线程... -
android 权限动态请求
2017-08-22 19:42:06动态请求所需权限,如果拒绝进入应用详情界面 -
Android开发之请求网络图片
2021-10-27 16:10:50注意:进行Http网络请求需要在AndroidManifest.xml中允许网络权限。 AndroidManifest.xml: <uses-permission android:name="android.permission.INTERNET"/> 布局文件,activity_main.xml: <... -
Android动态请求权限工具类
2017-06-19 10:00:57Android 动态权限工具类,使用简单方便,动态权限工具类动态权限工具类动态权限工具类动态权限工具类动态权限工具类动态权限工具类 -
Android 网络请求
2015-05-28 10:55:26网络请求 HTTPURLConnection GET ,一个简单的网络访问的DEMO,大家在自己使用的时候记得在manifest中修改网络权限 -
SoulPermission:权限检查或对Android的请求
2021-02-25 06:52:34Android权限调整的更优解决方案: 方法级权限调整,解压缩Activity和Fragment,不再需要Context,不再需要onPermissionResult 内部涵盖版本判断,一行代码解决权限相关操作,无需在调用业务方写权限适配代码,继而... -
【小王的安卓之路】Android原生网络请求
2019-08-01 12:25:01Android原生网络请求 一. 网络请求的必要性 二. 网络请求分类 三 网络请求实现方法 一.网络请求的必要性: 如今单机APP早已经接近消失就连最简单的时钟日期等软件都需要去请求网络来完成同步。我们在制作一个... -
hook Android 权限请求, 插入权限目的dialog显示
2022-04-16 13:54:27Permission_aim_tip ...100%拦截 RxPermission的权限请求(因为RxPermission就是基于Fragment) 方便配置,使用json配置 集成简便,一行代码即可。 可定制UI 使用 注册代理 只需要在Application中注册即可使用 pub -
Android 网络请求封装(Retrofit+OkHttp+RxJava+AutoDispose),解决网络请求引起的内存泄漏
2021-12-17 17:00:31Retrofit本质上是网络请求的封装库,并没有参与真正的网络请求操作,他为我们提供丰富的注解,用更优雅的方式包装网络请求需要的各个元素; OkHttp完成真正的网络请求操作,接收Retrofit获取的请求地址、请求头、... -
Android 6.0权限请求相关及权限分组方法
2021-01-20 09:19:41Android M(6.0)API 23后加入了权限请求设置,APP需要使用某些权限需要主动申请。 权限分为3类,一组是Normal权限,无需申请,另一组是Dangerous,需申请,然后是特殊权限,需申请。 先看下Normal权限列表: 再看...