首页 > 其他分享 >Android踩坑小记-在onResume中申请权限

Android踩坑小记-在onResume中申请权限

时间:2023-11-29 17:34:56浏览次数:42  
标签:onResume void requestPermission 申请 Android 权限 小记

Android踩坑小记-在onResume中申请权限

最近遇见一个问题,在onResume中申请权限,比如申请定位权限,如下所示:

@Override
    protected void onResume() {
        super.onResume();
        requestPermission();
    }


    @TargetApi(Build.VERSION_CODES.M)
    private void requestPermission(){
        LogUtils.i(TAG," in requestPermission");
        if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)== PackageManager.PERMISSION_GRANTED){
            LogUtils.i(TAG," get location Permission success");
        }else requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION},2);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

进入页面时会弹出一个权限申请弹框,如果点击允许一切正常,如果点击拒绝,会重新弹出权限申请对话框,一直拒绝的话会一直弹出。如果点击拒绝并且不再提醒,不会继续弹框,但是页面返回按钮不响应,观察日志发现onResume()中请求权限的代码循环执行。

为什么会循环执行?

因为在申请权限的时候会弹出这样一个框:

image-20231129172302788

当弹出这个框的时候会调用当前界面的 onPause()方法(Activity并没有被完全遮挡),当这个框消失的时候会重新调用 onResume()方法,这样当用户拒绝的时候,就会一直触发申请权限的逻辑。

解决办法

不要在onResume方法做申请权限的逻辑,可以放到onCreate或别的方法,做检查权限的逻辑是可以的。

标签:onResume,void,requestPermission,申请,Android,权限,小记
From: https://www.cnblogs.com/yongdaimi/p/17865417.html

相关文章

  • Android 两种方获取U盘的挂载路径
    第一种publicStringgetUsbPath(){try{StorageManagersm=(StorageManager)MyApplication.getContext().getSystemService(STORAGE_SERVICE);MethodgetVolumePathsMethod=StorageManager.class.getMethod("getVolumePaths&qu......
  • Android项目实战(六十七):自定义圆形进度条
    圆形进度条支持设置:1、圆环背景颜色2、圆管背景宽度3、进度圆环颜色4、进度圆环宽度5、圆环进度6、开始角度7、动画执行时间 自定义类:packagecom.example.mainactivty;importandroid.content.Context;importandroid.content.res.TypedArray;importandroid.......
  • Android开放配件 (AOA) 协议
    一、背景 自Android3.1之后的版本,Google引入了USBAccessories的概念,并提供了相关的开发库。Android3.1之后的版本不仅可以让Android设备作为USBHost的角色支持USB鼠标、键盘、游戏手柄等,还可以以USBDevice的角色与一些具有USBHost功能,但却扮演着配件角色的设备相连,Google......
  • Android之 看“马达”如何贯通Android系统 (从硬件设计 --> 驱动 --> HAL --> JNI -->
    Android之看“马达”如何贯通Android系统(从硬件设计-->驱动-->HAL-->JNI-->Framework-->Application)-如果天空不死-博客园https://www.cnblogs.com/skywang12345/p/3404808.html  在Android2.3(Gingerbread)系统的时候,我写过一篇关于“Android震动马达......
  • Android Compose 的分页(Paging3)
    Overview官方链接:https://developer.android.com/topic/libraries/architecture/paging/v3-overview需要注意的是,Paging库的组件在应用程序的三层中运行,Paging在三层的架构如下图:存储库层ViewModel层用户界面层在三层的数据传递如下图:方法/接口官方链接:https://dev......
  • Realtek蓝牙Android10.0移植结束后的基本测试和常见问题分析
    基本测试主要包括配置检查和BT测试两大部分配置检查:为了进一步确保porting没有问题,在测试之前先确认fw以及config文件是否存在。adbshell到测试平台的根目录,检查测试平台的vendor/firmware/目录中rtlxxxx_fw以及rtlxxxx_config文件是否存在(xxxx为BTChip型号)......
  • 直播系统代码,Android自定义View实现呼吸灯效果
    直播系统代码,Android自定义View实现呼吸灯效果自定义View的属性定义attrs.xml如下: <resources>  <declare-styleablename="BreathView">    <attrname="centerCircleRadius"format="dimension"/>    <attrname="circleCol......
  • 解决AndroidStudio 模拟器无网络连接
    解决AndroidStudio模拟器无网络连接主要原因是安卓模拟器的dns和电脑的dns不一致引起的,可以修改安卓模拟器的dns即可找到安卓模拟器的名字修改安卓模拟器dns命令 #Pixel7_API_30_fei这个是你自己模拟器的名字,也就是第一步中找的的模拟器名字./emulator-avdPixel......
  • android创建平板的分页页码
    在横向平板显示分页页码的时候,要实现下面的效果当默认分页超过5个之后中间显示...然后两边的页码按钮点击之后移动页码,点击1、2页码不移动,点击了第3页之后,左边移动到2、3、4页面,如下使用RecyclerView列表实现,通过对Item的type进行分类来实现页码按钮和省略号,下面是分页列表......
  • Android开发App回到桌面但不退出APP的实现
    方法1:Intentintent=newIntent();//创建Intent对象intent.setAction(Intent.ACTION_MAIN);//设置Intent动作intent.addCategory(Intent.CATEGORY_HOME);//设置Intent种类intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//标记context.startActivity(intent);方法2:......