原来这样可以优雅地解决小米手机后台弹窗权限问题

640?wx_fmt=jpeg


/   今日科技快讯   /


7月23日,据外媒报道,微软宣布将向总部位于美国旧金山的人工智能研究公司OpenAI投资10亿美元,为其云计算平台开发AI技术。


/   作者简介   /


本篇文章转载自nodzhang的博客,分享了他对于小米手机后台弹出界面权限的适配方案,相信会对大家有所帮助!


原文地址:

https://juejin.im/post/5d328ce3e51d454fbf540aad


/   前言   /


在一个风和日丽的下午,突然收到测试同学反馈在小米手机中有些页面无法正常启动的消息,我便立刻去排查代码,发现都是常规启动Activity的操作,却真的无法实现了,这让人感觉十分诡异。而这一现象只在小米手机中发生,所以断定肯定和小米手机的MIUI系统有关系,经过排查发现是小米手机中“后台弹出界面”的权限默认被拒绝了,这样在后台Service中或者其他一些后台操作都无法启动Activity了。


/   分析一波   /


在小米手机的应用权限管理中有一个“后台弹出界面权限”,该项权限会限制当APP处在后台时弹出Activity的动作,该权限时默认关闭的,可以在小米系统的权限管理页看到:


640?wx_fmt=jpeg


这个时候正常的startActivity()方法无法弹出Activity,在Log中筛选MIUILOG查看系统日志:


640?wx_fmt=png


我们可以看到其中有权限拒绝的具体说明:


 


可以看到是权限原因拒绝了启动Activity动作,随后我们在小米的官方论坛中也看到了他们的声明:


640?wx_fmt=png


/   解决方案   /


自从2019年5月份开始,小米开启了这项权限判断,所以之前可以正常弹出的界面现在无法弹出了。我们尝试了一些方法来绕过这个权限判断,比如启动一个前台Service来跳转、在Toast中来跳转,都无法绕过该权限判断,所以绕过权限这条路是不能走了,只能想办法正面解决。


商务谈判,让小米MIUI给默认开启此权限


我们普通APP安装后,此项权限默认是关闭的,当然有些大型APP具备和小米商务谈判的能力,小米会在系统设置中默认给予开启,比如“搜狗输入法”就是默认开启此权限的。


但是只有具备足够影响力的公司才能与小米谈判,而且要满足他们的各种条件,才能让其系统中默认为我们开启此权限,我们普通APP是做不到的,所以此方法不适用于我们普通APP。


进行权限判断,通过代码请求开启权限


我们面对普通权限请求一般处理方案是这样的,先判断是会否具有此项权限,如果没有就请求开启此权限。但是对于小米的这种厂商独有的权限,我们的难点在于没有相关API可以判断是否具备此权限,也没有API去申请此权限,所以这条路是不通的。当然可以通过反射之类的方法,去调用他系统层的一些东西,不过这样不太靠谱,研发代价也比较大,所以可以说是没有直接解决方案的。


那么这个问题就无解了么?我通过一系列讨论最后通过迂回方法进行解决,得出最终可用解决方案:


  1. 判断要启动的Activity是否被成功启动,如果没有则代表没有获取到权限。


  2. 弹窗提示用户去开启该权限。(由于没有后台弹出权限,无法直接跳转到系统的权限设置页,所以弹窗提示)


这里难点在于判断Activity是否被成功打开了,至于弹窗引导自己定制引导内容即可。下面一节,具体对如何判断Activity被成打开进行说明。


/   判断Activity是否被成功启动   /


这里同样也尝试了多种方案,比如:


在每个Activity的OnCreate()方法中进行处理(最终放弃)


当startActivity()后做一个0.5s倒计时逻辑,在要启动的Activity的OnCreate()方法中发一个广播来去掉该倒计时,如果没有被取消那么就说明没有启动成功。这样需要在每个Activity中做处理,过于繁琐,所以放弃。


通过Activity栈获取栈顶Activity判断(最终放弃)


当startActivity()后做一个0.5s倒计时逻辑,然后通过Activity栈的管理获得栈顶Activity,判断是否打开成功。这样避免每个Activity都要处理,比如我们可以查到常用方法是这样的 :


 


这个问题在于这些方法在Android 5.1之后也失效了,网上也有其他方法,使用usageStatsManager.queryUsageStats要获取额外的权限,所以也不是合理的方法。最终这个方法也不能实现可用性。


最终解决方案


工具类统一处理startActivity()方法,同时开启一个0.5s的倒计时。在Application中自己管理记录栈顶的Activity,用于判断栈顶Activity并完成是否成功打开,如果没有打开则展示引导弹窗。


这样把启动Activity和权限判断都在一个工具类中处理,以后只需要调用这个工具类,就实现了启动Activity、判断权限、以及权限弹窗引导。同时自己进行Activity栈的管理,解决了无法在各个Android版本上完成对Activity启动判断的问题。


首先在Application中监听所有Activity的生命周期,来记录栈顶Activity:


 


然后在工具类中做统一处理:


 


最后使用的时候直接调用工具类的方法startActivity()即可:



/   总结   /


小米后台弹出权限问题的解决,是通过曲线救国的方法解决的,因为没有直接的API可调用。这里封装成了一个工具类,任何需要添加权限判断的地方只需要调用工具类的方法就行了,这样既实现了统一管理,又方便调用,所以这是我们最终采用的方案。


推荐阅读:

Android Q新特性,一起来学习折叠屏应该如何适配

7张图带你轻松理解Java 线程安全

动手开发一个滴滴出行,是的,你没有看错!


欢迎关注我的公众号

学习技术或投稿


640.png?


640?wx_fmt=jpeg

长按上图,识别图中二维码即可关注


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28495.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时薪15美元的ChatGPT外包工人,干的都是苦力活

整理 | 朱珂欣 出品 | CSDN程序人生(ID:coder_life) 自 ChatGPT 去年 11 月发布以来,让不少打工人陷入担心失业的恐慌中,也解决了部分人的“就业问题”。 34 岁的 Alexej Savreux ,就是其中之一。 作为 …

AutoGPT:全自动的人工智能助手

让 GPT-4 为你实现一切! 随着人工智能技术的飞速发展,GPT-4 作为强大的人工智能语言模型成为了众多应用场景的核心。今天,我们将为你揭秘一款具有革命性意义的 GPT-4 应用——AutoGPT!一款让你轻松操控 GPT-4,实现各种…

文心一言、GPT3.5及GPT4的应用测评对比

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年2月份热门报告合集 最新亲测国内可用ChatGPT使用教程(3分钟搞定) ChatGPT团队背景研究报告 ChatGPT的发展历程、原理、技术架构及未来方向 Cha…

看New Bing回答世纪难题:女友和妈妈掉水里先救谁

1.女友和妈妈掉水里先救谁 今天好奇想看看New Bing怎么回答这种世纪难题 结果New Bing非常聪明,反手建议我不要直接回答这个问题,而是换个角度哄女朋友,带着点不甘心,我继续追问它 New Bing还是耍起了滑头,我开始怀疑…

“一天宕机三次”,为什么高并发这么难?

受访者 | 陈皓 作者 | 屠敏 出品 | 《新程序员》编辑部 高并发,并不是一个新鲜的话题,全互联网公司为之“费尽心思”多年,仍然无法完全逃脱卡顿、崩溃乃至宕机的宿命。 这不近日,一款名为“羊了个羊”的小程序游戏突然爆火&am…

美图终于等来AIGC的春天

作者|陈 妍 编辑|大 风 人类历史上,经历过三次科技颠覆时刻。 第一次是上世纪90年代,PC互联网的兴起,开始把全世界连接到一起。1995年,以雅虎为代表的企业,开创免费门户网站的互联网行业商业…

UML建模都有那些图(架构师必刷)

分析&回答 统一建模语言(Unified Modeling Language,UML)又称标准建模语言。 UML从考虑系统的不同角度出发,定义了用例图、类图、对象图、包图、状态图、活动图、序列图、通信图、构件图、部署图等10种图。下图中红字部分为…

SWAT 建模与案例应用

SWAT 建模与案例应用 一、模型简介 SWAT模型是美国农业部(USDA)的农业研究中心开发的分布式水文模型。 主要目的是为了预测在大流域复杂多变的土壤类型、土地利用方式和管理措施条件下,土地管理对水分、泥沙和化学物质的长期影响。 近年来…

UML建模工具Astah Pro教程

文章目录 前言一、下载安装Astah二、破解Astah总结 前言 UML建模工具Astah Pro 破解教程,拒绝盗版白嫖行为,只是本人囊中羞涩,想购买正版,但是心有余而力不足。所以此文章只做为技术学习交流,不用于任何商业用途。如果…

Unity+ChatGpt的联动 AICommand

果然爱是会消失的,对吗 chatGpt没出现之前起码还看人家的文章,现在都是随便你。 本着师夷长技以制夷的思路,既然打不过,那么我就加入 github地址:https://github.com/keijiro/AICommand 文档用chatGpt翻译如下&#…

AI 对话模型被网友玩坏了!这次还可以运行 Docker 容器...

最近一款新的聊天 AI 被网友们玩疯了。 它可以直接生成代码、可以给你的代码 debug 以及提出优化... 可以模仿莎士比亚风格写作... 还可以解答各种各样的问题,而且显然不只 10 岁小孩子的智商,感觉它已经把互联网上所有的公开资料都吸收并消化了。 这就是…

chatgpt赋能Python-python_png转pdf

Python PNG转PDF - 一种简便的图像转换方式 在图像处理中,有时我们需要将PNG格式的图像转换成PDF格式,以便于在电子文档中使用或者进行打印。虽然市面上有很多可用的图像转换工具,但是许多人都喜欢使用Python进行图像处理,因为Py…

HTC VIVE Focus Wave VR SDK 新手入门开发配置全指南 Development Tutorial

文章目录 配置Android开发环境下载 & 安装Java 8 SDK配置Android SDK 安装Unity安装Unity Hub安装Unity 2018.4.4f1配置Unity工程转换为安卓平台修改Player Settings工程设置 配置Unity路径导出设置 VIVE Input Utility介绍安装配置使用VIU模拟器 *本文是在开发人员岳阳分享…

实战分享1:如何使用华为VR Glass 6dof 基于 OpenXR@ unity 开发VR游戏/应用

目录 1 环境准备 2 使用OpenXR XR Interaction Toolkit 2.1 工程准备 2.1.1 安装openxr相关插件 2.1.2 配置工程 2.1.3 Debugger -XR Interaction Debugger 2.2 场景搭建 2.2.1 头部显示和位姿追踪测试 2.2.2 加入双手柄交互(6dof) 2.2.3 结果…

使用微软云人工智能,合成带感情的语音

以前公司下达了一个需求,要求用语音做广播,因为广播里面包含姓名,所以不能难以直接录制,需要使用合成语音。 一开始考虑到时间以及优先级问题,这边使用了百度的合成语音。 但是百度语音相对僵硬,而且没有…

Unity关于Oculus Quest2 入门开发:(三)基于XR Interaction Toolkit0.10.0开发交互功能之传送篇

说书人:“古语云:千里之行始于足下。“跑”,至关重要啊!…" 路人甲:“呵呵…” 皮一下很开心,哈哈,勿笑勿笑。。。 今天我们谈谈”跑“,无论是HTC Vive还是Oculus&#xff0c…

unity +vive(设备)+steam vr(软件)(第二天)

开始新的冒险! 我们这里还是选择使用3D模板就行。。(这里要注意项目名称,最好是英文,用中文可能后面代码会报错。。) 咱们先下载这个包然后导入,全选,导入 然后你就会能到你的unity弹出这三个…

【实战分享2】:如何基于OpenXR@ unity + 华为VR Glass 6dof Quest 开发跨平台VR游戏/应用

在上一篇中《【实战分享1】如何使用华为VR Glass 6dof 基于 OpenXR unity 开发VR游戏》最后小结中提到,基于openxr可以支持一套代码,达到跨平台部署: 使用openxr标准,无需在场景或者XR RIG上做任何的改动,可以跨平台&…

华为入局 VR 眼镜能让 VR 早普及几年?|CSDN博文精选

作者 | 小谦笔记 责编 | 刘静 出品 | CSDN博客 早在15、16年,VR、AR概念最先兴起的那会儿,还没有体验过VR的我,以为好莱坞大片里面那种“空中屏幕控制”的科技即将到来,只需要按一按眼镜,面前就会出现一个屏幕&#xf…

VR眼镜连接android设备,华为VR眼镜和电脑如何连接 投屏软件PCVR Assistant 2.0使用教程...

HUAWEI VR Glass如何连接电脑?HUAWEI VR Glass在电脑上如何使用?华为投屏软件PCVR Assistant 2.0如何使用?华为VR眼镜主打轻薄,能调节近视,支持联动多种设备,除了可以手机投屏外,还能使用投屏软件PCVR Assistant 2.0在电脑上轻松操作。下面来看看电脑上如何使用PCVR Ass…