怎样用网站做app,网站建设链接,wordpress怎么恢复自带主题,营销网站设计实验本来最近在开发一个app保活另外一个app的功能#xff0c;方案介绍如下#xff1a;
应用A 启动一个前台服务保活自己应用A 用grpc连接应用B(服务端)是否存活如果发现B不存活#xff0c;则在服务中拉起B 这次没有做好调研#xff0c;直接开始了开发工作#xff0c;等grpc都…本来最近在开发一个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:nameandroid.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)