Android前台服务如何在后台启动activity?
本来最近在开发一个app保活另外一个app的功能,方案介绍如下:
- 应用A 启动一个前台服务保活自己
- 应用A 用grpc连接应用B(服务端)是否存活
- 如果发现B不存活,则在服务中拉起B
这次没有做好调研,直接开始了开发工作,等grpc都调试开发完了,才发现 后台服务中启动应用B有时候能成功,有时候不能正常,不能成功报错如下:
Background activity start [callingPackage。。。。
问题原因就是 android10增加了后台启动activity的限制,当应用A在前台时,拉起应用B是可以的,担当应用A回到后台,即使有一个前台服务,也不能直接拉起应用B。
在网上查了很多资料,参考:Android 后台启动Activity适配
解决方案
我采用的是添加SYSTEM_ALERT_WINDOW权限,并申请该权限。
只需要申请权限,并不需要真的弹出一个悬浮窗出来。
1. 在AndroidManifest.xml中添加
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
2. 申请权限
private val requestAlertWindowsPermission = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->Log.i(TAG, "result code:${result.resultCode}")if (result.resultCode == Activity.RESULT_OK) {Log.i(TAG, "data_return:${result.data?.getStringExtra("data_return")}")}if (!Settings.canDrawOverlays(this)) {Log.i(TAG, "request alert windows Permission failed")} else {Log.i(TAG, "request alert windows Permission success")}}private fun requestAlertWindowPermission() {if (!Settings.canDrawOverlays(this)) {Log.i(TAG, "requestAlertWinPerm: request alert windows Permission")val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)intent.setData(Uri.parse("package:$packageName"))requestAlertWindowsPermission.launch(intent)} else {Log.i(TAG, "requestAlertWindowPermission already has Permission.")}}
3. 服务中启动activity。别忘了添加 FLAG_ACTIVITY_NEW_TASK
val packageName = "pkg"
val launchIntent = packageManager.getLaunchIntentForPackage(packageName)
if (launchIntent == null) {Log.e(TAG, "目标应用未安装")throw RuntimeException("目标应用未安装")
}
launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(launchIntent)
相关文章:
Android前台服务如何在后台启动activity?
本来最近在开发一个app保活另外一个app的功能,方案介绍如下: 应用A 启动一个前台服务保活自己应用A 用grpc连接应用B(服务端)是否存活如果发现B不存活,则在服务中拉起B 这次没有做好调研,直接开始了开发工作,等grpc都…...
c#visionpro开发 方法统计
toolblock开发 vpp第二种简单加载方式 public Cognex.VisionPro.ToolBlock.CogToolBlock ToolBlock1;//初始化后实例化一个方法 //窗口运行程序内部 ToolBlock1 (CogToolBlock)CogSerializer.LoadObjectFromFile(“tjjc.vpp”); MessageBox.Show(“算法加载成功”);//复制一个…...
dedecms——四种webshell姿势
姿势一:通过文件管理器上传WebShell 步骤一:访问目标靶场其思路为 dedecms 后台可以直接上传任意文件,可以通过文件管理器上传php文件获取webshell 步骤二:登陆到后台点击【核心】--》 【文件式管理器】--》 【文件上传】将准备好…...
GO GIN 推荐的库
在使用 Go 和 Gin 框架进行 Web 开发时,有许多第三方库可以增强功能和提高开发效率。以下是一些常用的、与 Gin 搭配使用的库: 1. 数据处理与验证 go-playground/validator 用于结构体字段的验证,Gin 默认已经集成了它。它提供了丰富的验证…...
YOLOv9改进策略【卷积层】| GnConv:一种通过门控卷积和递归设计来实现高效、可扩展、平移等变的高阶空间交互操作
一、本文介绍 本文记录的是利用GnConv优化YOLOv9的目标检测方法研究。YOLOv9在进行目标检测时,需要对不同层次的特征进行融合。GnConv可以考虑更高阶的空间交互,能够更好地捕捉特征之间的复杂关系,从而增强特征融合的效果,提高模…...
如何在Linux下升级R版本和RStudio
一、升级R版本 在Linux上,R的安装通常通过包管理器完成。不同的Linux发行版(如Ubuntu、Debian、Fedora等)可能略有不同。下面以Ubuntu为例,介绍如何升级R版本。如果你使用其他发行版,步骤可能类似。 二.更新步骤 2.…...
npm安装时候报错certificate has expired
打开了一个很久没用的电脑,npm和node都装好了,安装包的时候一直报错 request to https://registry.npm.taobao.org/create-react-app failed, reason: certificate has expired而且先报错rollbackFailedOptional 然而npm没什么问题,是ssl过…...
CSP-J_S第一轮复习资料1·计算机硬件
下一章...
oracle 表的外键
表的外键 3.5.1表之间的三种关系 在数据库设计中,工作中经常会分析商业逻辑中的表的设计。在设计表的关系之前,需要先了解关系型数据库特点。关系数据库有如下特点: 关系型数据库采用了关系模型来组织数据的数据库。 关系型数据库的最大特点…...
加密与安全_优雅存储二要素(AES-256-GCM )
文章目录 什么是二要素如何保护二要素(姓名和身份证)加密算法分类场景选择算法选择AES - ECB 模式 (不推荐)AES - CBC 模式 (推荐)GCM(Galois/Counter Mode)AES-256-GCM简介AES-256-GCM工作原理安全优势 应用场景其他模式 和 敏感…...
【C++高阶】解锁C++的深层魅力——探索特殊类的奥秘
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:C 类型转换 🌹🌹期待您的关注 🌹🌹 ❀C特殊类 📒1. 不能被拷贝…...
Vue学习记录之三(ref全家桶)
ref、reactive是在 setup() 声明组件内部状态用的, 这些变量通常都要 return 出去,除了供 < template > 或渲染函数渲染视图,也可以作为 props 或 emit 参数 在组件间传递。它们的值变更可触发页面渲染。 ref :是一个函数&…...
第二十六篇——九地篇:九种形势的应对之道
目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 地势的维度重新阐述了懂得人心的重要性,道久其归一为为别人。…...
学习记录:js算法(三十七): 搜索二维矩阵
文章目录 搜索二维矩阵我的思路网上思路 总结 搜索二维矩阵 给你一个满足下述两条属性的 m x n 整数矩阵: ● 每行中的整数从左到右按非严格递增顺序排列。 ● 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中&a…...
拥控算法BBR入门1
拥塞控制算法只与本地有关 一个TCP会话使用的拥塞控制算法只与本地有关。 两个TCP系统可以在TCP会话的两端使用不同的拥塞控制算法 Bottleneck Bandwidth and Round-trip time Bottleneck 瓶颈 BBR models the network to send as fast as the available bandwidth and is 2…...
[Python数据可视化]Plotly Express: 地图数据可视化的魅力
在数据分析和可视化的世界中,地图数据可视化是一个强大而直观的工具,它可以帮助我们更好地理解和解释地理数据。Python 的 Plotly Express 库提供了一个简单而强大的方式来创建各种地图。本文将通过一个简单的示例,展示如何使用 Plotly Expre…...
windows C++ 并行编程-PPL 中的取消操作(四)
并行模式库 (PPL) 中取消操作的角色、如何取消并行工作以及如何确定取消并行工作的时间。 运行时使用异常处理实现取消操作。 请勿在代码中捕捉或处理这些异常。 此外,还建议你在任务的函数体中编写异常安全的代码。 例如,可以使用获取资源即初始化 (RA…...
【数据结构】字符串与JSON字符串、JSON字符串及相应数据结构(如对象与数组)之间的相互转换
前言: 下面打印日志用的是FastJSON依赖库中的 Log4j2。依赖: <!-- Alibaba Fastjson --> <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.80</version> …...
LeetcodeTop100 刷题总结(一)
LeetCode 热题 100:https://leetcode.cn/studyplan/top-100-liked/ 文章目录 一、哈希1. 两数之和49. 字母异位词分组128. 最长连续序列 二、双指针283. 移动零11. 盛水最多的容器15. 三数之和42. 接雨水(待完成) 三、滑动窗口3. 无重复字符的…...
Next-ViT: 下一代视觉Transformer,用于现实工业场景中的高效部署
摘要 由于复杂的注意力机制和模型设计,大多数现有的视觉Transformer(ViTs)在实际的工业部署场景中,如TensorRT和CoreML,无法像卷积神经网络(CNNs)那样高效运行。这提出了一个明显的挑战&#x…...
5分钟掌握PESQ:Python语音质量评估终极指南
5分钟掌握PESQ:Python语音质量评估终极指南 【免费下载链接】PESQ PESQ (Perceptual Evaluation of Speech Quality) Wrapper for Python Users (narrow band and wide band) 项目地址: https://gitcode.com/gh_mirrors/pe/PESQ 想要客观评估语音处理算法效果…...
避开理论深坑:给开发者的机器学习实用入门指南(附周志华《机器学习》高效阅读路线)
避开理论深坑:给开发者的机器学习实用入门指南 作为一名开发者,你可能已经意识到机器学习正在改变我们解决问题的方式。从推荐系统到图像识别,从自然语言处理到预测分析,机器学习正在成为现代软件开发不可或缺的一部分。但当你翻开…...
Next-MDX-Remote部署指南:从开发到生产环境的完整流程
Next-MDX-Remote部署指南:从开发到生产环境的完整流程 【免费下载链接】next-mdx-remote Load mdx content from anywhere through getStaticProps in next.js 项目地址: https://gitcode.com/gh_mirrors/ne/next-mdx-remote Next-MDX-Remote 是一款强大的 N…...
重新定义交通安全研究范式:基于无人机轨迹数据的数字孪生解决方案
重新定义交通安全研究范式:基于无人机轨迹数据的数字孪生解决方案 【免费下载链接】UCF-SST-CitySim1-Dataset 项目地址: https://gitcode.com/gh_mirrors/ucf/UCF-SST-CitySim-Dataset 在自动驾驶技术快速发展的今天,传统交通安全研究面临着一个…...
dockerc故障排除终极指南:10个常见错误和解决方案清单
dockerc故障排除终极指南:10个常见错误和解决方案清单 【免费下载链接】dockerc container image to single executable compiler 项目地址: https://gitcode.com/gh_mirrors/do/dockerc dockerc作为一款container image to single executable compiler工具&…...
DDrawCompat:老游戏兼容性修复与性能优化终极解决方案
DDrawCompat:老游戏兼容性修复与性能优化终极解决方案 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/DDrawC…...
PyTorch实战:从零构建支持向量机进行图像二分类
1. 支持向量机与图像分类的奇妙碰撞 第一次听说要用支持向量机(SVM)做图像分类时,我脑子里立刻浮现出两个问号:这个传统机器学习算法能处理图像数据吗?为什么要用PyTorch实现而不是直接用scikit-learn?直到亲手实现了整个流程&…...
AI结对编程:与快马AI对话式迭代,智能优化你的系统ER图设计
AI结对编程:与快马AI对话式迭代,智能优化你的系统ER图设计 最近在做一个员工管理系统的数据库设计,发现ER图设计是个需要反复推敲的过程。传统方式下,每次修改都要手动调整图形,效率很低。直到尝试了InsCode(快马)平台…...
音乐自由之路:Unlock-Music技术突破实战指南
音乐自由之路:Unlock-Music技术突破实战指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gitcod…...
告别轮询!用STM32F407的USART3+DMA+空闲中断实现高效串口数据接收
STM32F407高效串口通信:USART3DMA空闲中断实战指南 在嵌入式开发中,串口通信是最基础也最常用的外设之一。传统的中断接收方式虽然简单,但在高速或大数据量传输时,频繁的中断响应会显著增加CPU负担,甚至导致数据丢失。…...
