Android前台服务如何在后台启动activity?

本来最近在开发一个app保活另外一个app的功能,方案介绍如下:

  1. 应用A 启动一个前台服务保活自己
  2. 应用A 用grpc连接应用B(服务端)是否存活
  3. 如果发现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)

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

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

相关文章

新型 Vo1d 恶意软件曝光,超130万台安卓电视设备已中招

近日&#xff0c;有攻击者使用一种新的 Vo1d 后门恶意软件感染了 130 余万台安卓电视流媒体盒&#xff0c;使得攻击者能够完全控制这些设备。 Android TV是谷歌针对智能电视和流媒体设备推出的操作系统&#xff0c;为电视和远程导航提供了优化的用户界面&#xff0c;集成了谷歌…

MySQL--库的操作

文章目录 1.创建数据库2.创建数据库案例3.字符集和校验规则3.1默认字符集3.2默认校验规则3.3查看系统默认字符集以及校验规则3.4查看数据库支持的字符3.5查看数据库支持的字符集校验规则3.6校验规则对数据库的影响不区分大小写查询&#xff1a;排序结果&#xff1a;区分大小写查…

GO 反射

文章目录 基本概念与语法1. **获取类型和值**2. **反射修改值**3. **检查类型种类&#xff08;Kind&#xff09;** 反射的高级使用场景1. **结构体字段操作**2. **调用函数**3. **动态创建和修改切片、映射**4. **JSON 序列化/反序列化**5. **类型安全的通用函数**6. **动态生成…

架构师白话分布式系统

对于分布式系统的定义,大致可以理解为如下的两个点 分布式系统从整体的体量来说,它内部是由很多的服务器、服务实例组成。所提供的用户服务是由一组相互独立运行的服务器来提供。对于用户来说,这个多服务器的系统就跟一个服务器一样,感觉不到每个单独的服务器实例的存在。从…

JSON串

JSON在客户端的使用 JSON 字符串的格式是基于键值对的数据结构&#xff0c;用于表示结构化数据。它遵循严格的语法规则&#xff0c;常用于前后端数据交互。 1. 基本结构 JSON 数据结构由两种主要元素构成&#xff1a; 对象&#xff08;Object&#xff09;&#xff1a;用花括…

小阿轩yx-Zabbix企业级分布式监控环境部署

小阿轩yx-Zabbix企业级分布式监控环境部署 前言 “运筹帷幄之中&#xff0c;决胜千里之外”监控在 IT 运维中占据着重要地位&#xff0c;按比例说占 30% 也不为过在监控系统开源软件中有很多可选择的工具&#xff0c;但是真正符合要求的、能够真正解决业务问题的监控系统软件…

TCP与HTTP的关系

这是我面试遇到的问题&#xff0c;整理下来了&#xff0c;希望对大家有帮助&#xff01; 首先&#xff1a; TCP是传输控制协议&#xff0c;他在传输层 HTTP是超文本传输协议&#xff0c;在应用层 应用层的协议通常需要借助传输层的协议来实现网络通信从而访问网页等资源。 …

UML的图及其他图补充

一、UML图 1.类图 ‌类图‌是统一建模语言&#xff08;UML&#xff09;中的一种静态结构图&#xff0c;主要用于描述软件系统的静态结构。它显示了模型中的类、类的内部结构以及它们与其他类的关系。类图是面向对象建模的主要组成部分&#xff0c;用于对系统的词汇进行建模、对…

C语言:刷题日志(3)

一.猴子选大王 一群猴子要选新猴王。新猴王的选择方法是&#xff1a;让N只候选猴子围成一圈&#xff0c;从某位置起顺序编号为1~N号。从第1号开始报数&#xff0c;每轮从1报到3&#xff0c;凡报到3的猴子即退出圈子&#xff0c;接着又从紧邻的下一只猴子开始同样的报数。如此不…

打造高效实时数仓,从Hive到OceanBase的经验分享

本文作者&#xff1a;Coolmoon1202&#xff0c;大数据高级工程师&#xff0c;专注于高性能软件架构设计 我们的业务主要围绕出行领域&#xff0c;鉴于初期采用的数据仓库方案面临高延迟、低效率等挑战&#xff0c;我们踏上了探索新数仓解决方案的征途。本文分享了我们在方案筛选…

基本mysql

基础sql语句 关于数据库 创建数据库 语法&#xff1a; CREATE DATABASE [IF NOT EXISTS] database_name [CHARACTER SET charset_name] [COLLATE collation_name]; [ ] 代表可选 database_name 是你想要创建的数据库的名称。CHARACTER SET 可选&#xff…

一区霜冰算法+双向深度学习模型+注意力机制!RIME-BiTCN-BiGRU-Attention

一区霜冰算法双向深度学习模型注意力机制&#xff01;RIME-BiTCN-BiGRU-Attention 目录 一区霜冰算法双向深度学习模型注意力机制&#xff01;RIME-BiTCN-BiGRU-Attention效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现RIME-BiTCN-BiGRU-Attention霜冰算法…

nlohmann::json中有中文时调用dump转string抛出异常的问题

问题描述 Winodows下C开发想使用一个json库&#xff0c;使用的nlohmann::json&#xff0c;但是遇到json中使用中文时&#xff0c;转成string&#xff0c;会抛出异常。 nlohmann::json contentJson;contentJson["chinese"] "哈哈哈";std::string test con…

K-means 算法的介绍与应用

目录 引言 K-means 算法的基本原理 表格总结&#xff1a;K-means 算法的主要步骤 K-means 算法的 MATLAB 实现 优化方法与改进 K-means 算法的应用领域 表格总结&#xff1a;K-means 算法的主要应用领域 结论 引言 K-means 算法是一种经典的基于距离的聚类算法&#xff…

气膜馆电费高吗?—轻空间

很多人关心气膜馆的电费问题&#xff0c;实际上&#xff0c;气膜馆不仅电费不高&#xff0c;还具有显著的节能优势。气膜建筑在设计上充分考虑了能耗管理&#xff0c;具备以下几大特点&#xff1a; 1. 高效保温隔热&#xff0c;减少能耗 气膜馆采用特殊材料和结构设计&#xf…

力扣100题——贪心算法

概述 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在解决问题时&#xff0c;按照某种标准在每一步都选择当前最优解&#xff08;局部最优解&#xff09;的算法。它期望通过一系列局部最优解的选择&#xff0c;最终能够得到全局最优解。 贪心算法的核心思想 贪心算…

【Colab代码调试】End-to-end reproducible AI pipelines in radiology using the cloud

文章目录 报错MessageError: Error: credential propagation was unsuccessful解决办法原理 找不到GPU解决办法 关于文件结构RTSTRUCT是什么nrrd是什么格式 !gcloud config set project $GCP_PROJECT_ID报错Access Denied: User does not have bigquery.jobs.create permission…

C# 比较对象新思路,利用反射技术打造更灵活的比较工具

前言 嘿&#xff0c;大家好&#xff01;如果你之前看过我分享的文章《C# 7个方法比较两个对象是否相等》&#xff0c;你可能会意识到对象比较在实际业务中经常出现的场景。今天&#xff0c;我想继续与大家分享一个在实际项目中遇到的问题。 有一次&#xff0c;我接手了一个别…

个人健康信息系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;健康分析师管理&#xff0c;健康手册管理&#xff0c;健康饮食管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;健康手册&#xff0c;健康饮食&…

github域名与IP变更导致无法推送分支问题的解决

问题 当执行推送命令的时候&#xff0c;出现如下错误&#xff1a; $ git push fork my_branch WARNING: POSSIBLE DNS SPOOFING DETECTED! The RSA host key for github.com has changed, and the key for the corresponding IP address 20.205.243.166 is unk…