最近写管控服务app的时候,有个需求要在前台Service服务中吊起某包名App。
吊起方法如下:
val intent = packageManager.getLaunchIntentForPackage("com.xingin.xhs")
if (intent != null) {
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
}
方法2 用AndroidUtilCode的方法:
AndroidUtilCode
AppUtils.launchApp(appPackage)
两个方法是没有问题的,如果有前台页面都是可以调用起来。通过查阅资料得知:
Android O(API 级别 26)及更高版本对在后台的应用启动新的 Activity 有所限制。即使你的服务是前台服务,如果你的应用当前对用户不可见(即你的应用在后台),调用 startActivity() 方法仍然可能失败。 Android 10 (API 级别 29)及更高版本更是增加了这方面的限制。
这是由于 Android 为了提高用户体验和设备性能,在后台应用对用户行为的影响方面做了限制。
所以,总体建议,避免从后台服务启动 Activity,因为这往往会给用户带来不好的体验。