iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android 6.0动态权限申请教程
  • 676
分享到

Android 6.0动态权限申请教程

动态教程Android 2022-06-06 01:06:28 676人浏览 独家记忆
摘要

PermissionManage 项目地址:https://GitHub.com/why168/AndroidProjects/tree/master/PermissionMa

PermissionManage

项目地址:https://GitHub.com/why168/AndroidProjects/tree/master/PermissionManage

介绍

如果设备运行的是 Android 6.0(api 级别 23)或更高版本,并且应用的 targetSdkVersion 是 23 或更高版本,则应用在运行时向用户请求权限。

如果设备运行的是 Android 5.1(API 级别 22)或更低版本,并且应用的 targetSdkVersion 是 22 或更低版本,则系统会在用户安装应用时要求用户授予权限。

参考资料

Https://developer.android.Google.cn/guide/topics/security/permissions.html

https://github.com/lovedise/PermissionGen

https://github.com/tbruyelle/RxPermissions

以下是需要单独申请的权限,共分为9组,每组只要有一个权限申请成功了,就默认整组权限都可以使用了


group:android.permission-group.CONTACTS
 permission:android.permission.WRITE_CONTACTS
 permission:android.permission.GET_ACCOUNTS 
 permission:android.permission.READ_CONTACTS
 group:android.permission-group.PHONE
 permission:android.permission.READ_CALL_LOG
 permission:android.permission.READ_PHONE_STATE 
 permission:android.permission.CALL_PHONE
 permission:android.permission.WRITE_CALL_LOG
 permission:android.permission.USE_SIP
 permission:android.permission.PROCESS_OUTGOING_CALLS
 permission:com.android.voicemail.permission.ADD_VOICEMAIL
 group:android.permission-group.CALENDAR
 permission:android.permission.READ_CALENDAR
 permission:android.permission.WRITE_CALENDAR
 group:android.permission-group.CAMERA
 permission:android.permission.CAMERA
 group:android.permission-group.SENSORS
 permission:android.permission.BODY_SENSORS
 group:android.permission-group.LOCATION
 permission:android.permission.ACCESS_FINE_LOCATION
 permission:android.permission.ACCESS_COARSE_LOCATION
 group:android.permission-group.STORAGE
 permission:android.permission.READ_EXTERNAL_STORAGE
 permission:android.permission.WRITE_EXTERNAL_STORAGE
 group:android.permission-group.MICROPHONE
 permission:android.permission.RECORD_AUDIO
 group:android.permission-group.SMS
 permission:android.permission.READ_SMS
 permission:android.permission.RECEIVE_WAP_PUSH
 permission:android.permission.RECEIVE_MMS
 permission:android.permission.RECEIVE_SMS
 permission:android.permission.SEND_SMS
 permission:android.permission.READ_CELL_BROADCASTS

以下是普通权限,只需要在AndroidManifest.xml中申请即可


 android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
 android.permission.ACCESS_NETWORK_STATE
 android.permission.ACCESS_NOTIFICATION_POLICY
 android.permission.ACCESS_WIFI_STATE
 android.permission.ACCESS_WIMAX_STATE
 android.permission.BLUETOOTH
 android.permission.BLUETOOTH_ADMIN
 android.permission.BROADCAST_STICKY
 android.permission.CHANGE_NETWORK_STATE
 android.permission.CHANGE_WIFI_MULTICAST_STATE
 android.permission.CHANGE_WIFI_STATE
 android.permission.CHANGE_WIMAX_STATE
 android.permission.DISABLE_KEYGUARD
 android.permission.EXPAND_STATUS_BAR
 android.permission.FLASHLIGHT
 android.permission.GET_ACCOUNTS
 android.permission.GET_PACKAGE_SIZE
 android.permission.INTERNET
 android.permission.KILL_BACKGROUND_PROCESSES
 android.permission.MODIFY_AUDIO_SETTINGS
 android.permission.NFC
 android.permission.READ_SYNC_SETTINGS
 android.permission.READ_SYNC_STATS
 android.permission.RECEIVE_BOOT_COMPLETED
 android.permission.REORDER_TASKS
 android.permission.REQUEST_INSTALL_PACKAGES
 android.permission.SET_TIME_ZONE
 android.permission.SET_WALLPAPER
 android.permission.SET_WALLPAPER_HINTS
 android.permission.SUBSCRIBED_FEEDS_READ
 android.permission.TRANSMIT_IR
 android.permission.USE_FINGERPRINT
 android.permission.VIBRATE
 android.permission.WAKE_LOCK
 android.permission.WRITE_SYNC_SETTINGS
 com.android.alarm.permission.SET_ALARM
 com.android.launcher.permission.INSTALL_SHORTCUT
 com.android.launcher.permission.UNINSTALL_SHORTCUT

示例代码



public class BaseActivity extends AppCompatActivity {
 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 }
 
 public boolean hasPermission(String... permissions) {
 for (String permission : permissions) {
 if (ActivityCompat.checkSelfPermission(this, permission)
 != PackageManager.PERMISSION_GRANTED) {
 return false;
 }
 }
 return true;
 }
 
 public void requestPermission(int requestCode, String... permissions) {
 ActivityCompat.requestPermissions(this, permissions, requestCode);
 }
 @Override
 public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
 super.onRequestPermissionsResult(requestCode, permissions, grantResults);
 switch (requestCode) {
 case PermissionsConstans.WRITE_STORAGE_CODE:
 if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
 doSDCardPermission();
 } else {
 //TODO 提示用户权限未授予
 Toast.makeText(BaseActivity.this, "WRITE_EXTERNAL_STORAGE 权限未开启", Toast.LENGTH_SHORT).show();
 }
 break;
 case PermissionsConstans.CALL_PHONE_CODE:
 if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
 doCallPhone();
 } else {
 //TODO 提示用户权限未授予
 Toast.makeText(BaseActivity.this, "ACTION_CALL 权限未开启", Toast.LENGTH_SHORT).show();
 }
 break;
 default:
 break;
 }
 }
 
 protected void doSDCardPermission() {
 //TODO
 }
 
 protected void doCallPhone() {
 //TODO 
 }
}


public class PermissionActivity extends BaseActivity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_permission);
 }
 public void callPhone(View view) {
 if (hasPermission(android.Manifest.permission.CALL_PHONE)) {
 doCallPhone();
 } else {
 requestPermission(PermissionsConstans.CALL_PHONE_CODE, android.Manifest.permission.CALL_PHONE);
 }
 }
 public void sdCardPermission(View view) {
 if (hasPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
 doSDCardPermission();
 } else {
 requestPermission(PermissionsConstans.WRITE_STORAGE_CODE, android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
 }
 }
 @Override
 protected void doCallPhone() {
 Intent intent = new Intent(Intent.ACTION_CALL);
 intent.setData(Uri.parse("tel:" + "10000"));
 startActivity(intent);
 }
 @Override
 protected void doSDCardPermission() {
 OkHttpClient okHttpClient = new OkHttpClient();
 Request request = new Request
 .Builder()
 .url("/file/imgs/upload/202206/06/0bg2prurw3h.jpg")
 .get()
 .build();
 Call call = okHttpClient.newCall(request);
 call.enqueue(new Callback() {
 @Override
 public void onFailure(Call call, IOException e) {
 }
 @Override
 public void onResponse(Call call, Response response) throws IOException {
 ResponseBody body = response.body();
 InputStream is = body.byteStream();
 int len = 0;
 byte[] bytes = new byte[2048];
 String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + System.currentTimeMillis() + ".jpg";
 File file = new File(path);
 FileOutputStream fos = new FileOutputStream(file);
 while ((len = is.read(bytes)) != -1) {
  fos.write(bytes, 0, len);
  fos.flush();
 }
 Toast.makeText(PermissionActivity.this, "SDCard写入成功", Toast.LENGTH_SHORT).show();
 Log.e("Edwin", "SDCard写入成功");
 }
 });
 }
}


public class PermissionGenActivity extends AppCompatActivity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_permission_gen);
 }
 public void openCamera(View view) {
 PermissionGen.needPermission(this, 200, Manifest.permission.CAMERA);
 }
 public void openGroup(View view) {
 PermissionGen
 .with(this)
 .addRequestCode(100)
 .permissions(
Manifest.permission.READ_CONTACTS,
Manifest.permission.RECEIVE_SMS,
  Manifest.permission.CAMERA,
Manifest.permission.WRITE_CONTACTS)
 .request();
 }
 @PermissionSuccess(requestCode = 100)
 public void openGroupSuccess() {
 Toast.makeText(this, "Group Permission Success", Toast.LENGTH_SHORT).show();
 startActivity(new Intent(this, ContactActivity.class));
 }
 @PermissionFail(requestCode = 100)
 private void openGroupFail() {
 Toast.makeText(this, "Group permission is not granted", Toast.LENGTH_SHORT).show();
 }
 @PermissionSuccess(requestCode = 200)
 public void openCameraSuccess() {
 Toast.makeText(this, "Camera permission Success", Toast.LENGTH_SHORT).show();
 }
 @PermissionFail(requestCode = 200)
 public void openCameraFail() {
 Toast.makeText(this, "Camera permission is not granted", Toast.LENGTH_SHORT).show();
 }
 @Override
 public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
 PermissionGen.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
 }
}


public class RxPermissionActivity extends AppCompatActivity {
 private static final String TAG = "RxPermissionsSample";
 private Camera camera;
 private SurfaceView surfaceView;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 RxPermissions rxPermissions = new RxPermissions(this);
 rxPermissions.setLogging(true);
 setContentView(R.layout.activity_rx_permission);
 surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
 RxView.clicks(findViewById(R.id.enableCamera))
 // Ask for permissions when button is clicked
 .compose(rxPermissions.ensureEach(Manifest.permission.CAMERA))
 .subscribe(new Action1<Permission>() {
  @Override
  public void call(Permission permission) {
   Log.i(TAG, "Permission result " + permission);
   if (permission.granted) {
   releaseCamera();
   camera = Camera.open(0);
   try {
camera.setPreviewDisplay(surfaceView.getHolder());
camera.startPreview();
   } catch (IOException e) {
   Log.e(TAG, "Error while trying to display the camera preview", e);
   }
   } else if (permission.shouldShowRequestPermissionRationale) {
   // Denied permission without ask never again
   Toast.makeText(RxPermissionActivity.this, "Denied permission without ask never again", Toast.LENGTH_SHORT).show();
   } else {
   // Denied permission with ask never again
   // Need to go to the settings
   Toast.makeText(RxPermissionActivity.this, "Permission denied, can't enable the camera", Toast.LENGTH_SHORT).show();
   }
  }
  },
  new Action1<Throwable>() {
  @Override
  public void call(Throwable t) {
  Log.e(TAG, "onError", t);
  }
  },
  new Action0() {
  @Override
  public void call() {
  Log.i(TAG, "OnComplete");
  }
  });
 }
 @Override
 protected void onStop() {
 super.onStop();
 releaseCamera();
 }
 private void releaseCamera() {
 if (camera != null) {
 camera.release();
 camera = null;
 }
 }
}
您可能感兴趣的文章:android 6.0 写入SD卡的权限申请实例讲解Android 6.0 蓝牙搜索不到设备原因,MIUI权限申请机制方法React-Native之Android(6.0及以上)权限申请详解Android 6.0权限申请详解及权限资料整理Android超清晰6.0权限申请AndPermission


--结束END--

本文标题: Android 6.0动态权限申请教程

本文链接: https://www.lsjlt.com/news/21990.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android 6.0中怎么申请动态权限
    Android 6.0中怎么申请动态权限?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。如果设备运行的是 Android 6.0(API 级别 23)或更高版本,并且应用的 ta...
    99+
    2023-05-31
    android android6.0 roi
  • Android---动态权限申请
    目录 权限分类 动态权限核心函数 简易实现案例 完整代码     Google 在 Android 6.0 开始引入了权限申请机制,将所有权限分成了正常权限和危险权限。App 每次在使用危险权限时需要动态的申请并得到用户的授权才能使用。 权...
    99+
    2023-09-05
    android 数码相机
  • Android动态权限申请详解
    目录前言使用方案绕过生命周期检测最终实现总结前言 注:只想看实现的朋友们可以直接跳到最后面的最终实现 大家是否还在为动态权限申请感到苦恼呢?传统的动态权限申请需要在Activity中...
    99+
    2023-05-17
    Android动态权限申请 Android权限申请
  • android 12 SD动态申请读写权限
    android 12 如何动态申请读写权限 android 12不仅需要在AndroidManifest.xml申请读写权限也需要在代码中动态的申请 关于如何动态申请读写权限仅需要两步 在AndroidManifest.xml文件中申...
    99+
    2023-08-16
    android java 开发语言
  • Android动态权限申请如何实现
    本篇内容介绍了“Android动态权限申请如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Google 在 Android 6.0 开...
    99+
    2023-07-05
  • Android registerForActivityResult动态申请权限案例详解
    前言 这几天在做一个小工具app,结果在fragment里面动态申请权限提示原有的申请方法已经弃用,还画了很明显的删除线。。。这叫一个强迫症的我怎么受得了。赶紧网上找资料也找不出什么...
    99+
    2024-04-02
  • 安卓动态申请权限
    我们在使用一些官方app时,刚下载进去之后经常会弹出各种各样的权限获取请求,今天简单学习了下,希望不会误人子弟哈哈哈哈。 一、将需要用到的权限添加到Manifest清单里  这一步很重要,本人Debug时发现如果缺少这步,进入...
    99+
    2023-09-21
    android
  • Android动态权限申请实现步骤分解
    目录权限分类动态权限核心函数简易实现案例完整代码 Google 在 Android 6.0 开始引入了权限申请机制,将所有权限分成了正常权限和危险权限。App 每次在使用危险权限时需...
    99+
    2023-05-14
    Android动态权限申请 Android权限动态申请 Android申请权限
  • 关于Android 6.0权限的动态适配详解
    前言Android6.0代号棉花糖。尽管是在15年I/O大会上Google被正式发布的了。但是看看大多数人的项目中大家的 targetSdkVersion 是不是还都用的22。大家都认为6.0+的市场占有率还没那么高。那么就请看谷歌2017...
    99+
    2023-05-30
    android6.0 权限 动态适配
  • Android 开发中的权限申请
    一、权限动态申请         我们都知道,从 Android 6.0 开始,部分危险权限在 xml 注册的同时,还需要动态申请。 1、需要动态申请的权限 Manifest.permission.CONTACTS //联系人Manifes...
    99+
    2023-09-01
    android
  • Android申请相机权限和读写权限实例
    开发一个相机应用,需要申请三个权限:相机、读文件、写文件。 1、在AndroidManifest.xml中添加 <uses-permission android:name="a...
    99+
    2024-04-02
  • Android动态获取权限(详细教程附代码)
    Android动态获取权限 概述动态获取权限具体实现layout布局代码回调函数onRequestPermissionsResult权限判断工具类清单文件方式一:懒汉式方式二:饿汉式 ...
    99+
    2023-09-16
    android java 开发语言
  • 【微信小程序地理位置权限】申请教程
    一、背景 微信为进一步规范开发者调用涉用户信息相关接口或功能,自2022年4月18日开始,将对地理位置相关接口实行准入开通。如未申请,后续将影响线上小程序相关功能的使用。 点击查看公告: 小程序地理位置相关接口调整 (qq.com) 二、申...
    99+
    2023-09-07
    微信小程序 小程序
  • Android Permission 权限申请,EasyPermission和其他三方库
    在Android的实际开发中,经常会因为需求的实现,需要申请用户权限。 今天总结下Android中常用的权限申请。 一、基本介绍和流程 Android中的权限申请是通过应用程序与操作系统之间的交互实现的。在Android中,每个应用程序都被...
    99+
    2023-09-07
    android
  • Android简单实现动态权限获取相机权限及存储空间等多权限
    目录1.在Manifest中添加权限2.在MainActivity中添加动态获取权限函数1.在Manifest中添加权限 2022.5.20更新shouldShowRequestPe...
    99+
    2024-04-02
  • android studio开发——android11版本以上权限动态申请问题,包括文件读写、图片、相机的调用
    用于android手机的升级,现在已经是android13版本了,对于权限问题可能更加敏感了,前段时间开发发现之前的方法已经不再适用于android11以后的版本了 读写权限申请最好是跳转到设置中进行才是最好了,下面我们开始进行 首先是An...
    99+
    2023-08-31
    android android studio
  • Android启动页设置及动态权限跳转问题解决
    目录启动页的作用启动页跳转动态权限获取完整启动页控制程序启动页的作用 在我遇到这个实际问题之前,我一直认为启动页的作用是美化产品,提升软件逼格。但实际上,它更重要的是起到了一个拦截器...
    99+
    2024-04-02
  • SpringBoot使用Shiro实现动态加载权限详解流程
    目录一、序章二、SpringBoot集成Shiro1、引入相关maven依赖2、自定义Realm3、Shiro配置类三、shiro动态加载权限处理方法四、shiro中自定义角色与权限...
    99+
    2024-04-02
  • Android usb设备权限查询及自动获取详解流程
    看到当上面的对话框弹出时,可以使用命令查看顶层的活动窗口 adb shell dumpsys window | findstr mCurrentFocus mCurrentFo...
    99+
    2024-04-02
  • 数据源管理 | 动态权限校验,表结构和数据迁移流程
    本文源码:GitHub·点这里 || GitEE·点这里一、数据同步简介1、场景描述如果经常接触数据开发,会有这样一个场景,服务A提供一个数据源,假设称为动态数据源A,需要读取该数据源下的数据;服务B提供一个数据源,假设称为动态数据源B,...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作