广告
返回顶部
首页 > 资讯 > 移动开发 >Android 6.0权限申请详解及权限资料整理
  • 789
分享到

Android 6.0权限申请详解及权限资料整理

Android 2022-06-06 07:06:25 789人浏览 安东尼
摘要

在Android 6.0开始,部分的权限需要我们动态申请,也就是说当我们的打开app的时候系统不会主动像您申请app所需要的部分权限,需要客户在使用app的时候主动的去申请。

Android 6.0开始,部分的权限需要我们动态申请,也就是说当我们的打开app的时候系统不会主动像您申请app所需要的部分权限,需要客户在使用app的时候主动的去申请。

一、权限的申请两步骤:

1、权限申请:



 public static void requestPermissions(final @NonNull Activity activity,final @NonNullString[] permissions, final int requestCode)

2、申请回调处理:


 
 public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)

二、Fragment中运行时权限的特殊处理

在Fragment中申请权限,不要使用ActivityCompat.requestPermissions, 直接使用Fragment的requestPermissions方法,否则会回调到Activity的onRequestPermissionsResult如果在Fragment中嵌套Fragment,在子Fragment中使用requestPermissions方 法,onRequestPermissionsResult不会回调回来,建议使用 getParentFragment().requestPermissions方法,

这个方法会回调到父Fragment中的onRequestPermissionsResult,加入以下代码可以把回调透传到子Fragment


 @Override
 public void  onRequestPermissionsResult(int requestCode, String[] permissions, int[]  grantResults) {
   super.onRequestPermissionsResult(requestCode,  permissions, grantResults);
   List  fragments = getChildFragmentManager().getFragments();
   if (fragments != null)  {
   for (Fragment  fragment : fragments) {
      if (fragment !=  null) {
        fragment.onRequestPermissionsResult(requestCode,permissions,grantResults);
      }
   }
 }
}

三、权限申请的简单封装


 public class RequestPermissions {
   public static intREQUEST_EXTERNAL_STORAGE = 1;
   public static String[]PERMISSIONS_STORAGE = {
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
   };
   
   public static voidwriteExternalStorage(final Context mContext, PermissionCallBack mCallBack) {
   //检查是否拥有相应的权限
      int permission =ActivityCompat.checkSelfPermission(mContext,Manifest.permission.WRITE_EXTERNAL_STORAGE);
   //没有权限发起申请
   if (permission !=PackageManager.PERMISSION_GRANTED) {
   //6.0及以上版本才需要申请权限
      if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
        ActivityCompat.requestPermissions((Activity) mContext,PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);
      else {
        mCallBack.setOnPermissionListener(false);
      }
   } else {
      mCallBack.setOnPermissionListener(true);
   }
 }
   
 public static voidwriteExternalStorage(final Context mContext, PermissionCallBack mCallBack, intrequestCode) {
   //检查是否拥有相应的权限
   int permission =ActivityCompat.checkSelfPermission(mContext,Manifest.permission.WRITE_EXTERNAL_STORAGE);
   //没有权限发起申请
   if (permission !=PackageManager.PERMISSION_GRANTED) {
      //6.0及以上版本才需要申请权限
      if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
        ActivityCompat.requestPermissions((Activity) mContext,PERMISSIONS_STORAGE,requestCode);
      else {
        mCallBack.setOnPermissionListener(false);
      }
   } else {
      mCallBack.setOnPermissionListener(true);
   }
 }
 
 public static void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,@NonNull int[] grantResults, PermissionCallBack mCallBack) {
   if (requestCode ==REQUEST_EXTERNAL_STORAGE) {
      //判断权限是否申请成功
      if(grantResults.length > 0 && grantResults[0] ==PackageManager.PERMISSION_GRANTED) {
        mCallBack.setOnPermissionListener(true);
      } else {
        mCallBack.setOnPermissionListener(false);
      }
      return;
   }
 }
 
 public static void openPre(final Context mContext) {
   RemindDialogUtil.showRemindDialog(mContext, "當前無權限,將無法進行應用升級~,是否打开设置?", new RemindDialogUtil.DialoGCallBack() {
      @Override
      public void clickYes() {
        //跳转到设置页面,手动打开权限
        Intent intent= new Intent();
        intent.setAction(Settings.ACTION_APPLICATION_SETTINGS);
        mContext.startActivity(intent);
        RemindDialogUtil.hideRemindDialog();
      }
      @Override
      public voidclickCancel() {
        RemindDialogUtil.hideRemindDialog();
      }
   });
   }
   public interfacePermissionCallBack {
      void setOnPermissionListener(Boolean bo);
   }
 }

附录

以下权限都需要在运行时判断:

身体传感器

日历

摄像头

通讯录

地理位置

麦克风

电话

短信

存储空间

以下权限只需要在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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

您可能感兴趣的文章: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/23708.html(转载时请注明来源链接)

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

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

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

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作