将其他 Android activity 推到前台

Pushing other Android activity to foreground

我从包 A 触发了来自特权包 B 的 运行ning 服务。 包 B 执行包 A 的更新。 目标设备正在使用 Android 9(API 级别 28)。 更新成功(应用版本码发生变化)。 但我的问题是,更新后,包 A 在后台;在我的设备上,它在后台应用程序列表中,我必须手动按下它才能将其调到前台。

我希望它在安装后回到前台。

我尝试了什么:

有什么方法可以完成这个任务吗? (这应该是可行的,因为包 B 是特权的(使用标准程序安装在 /system/priv-app 下的 root 设备上)并且具有与包 A 相同的签名)

安装完成后需要启动一个Activity。您可能会在安装完成之前启动 activity。要获取应用 A 更新完成,请像这样注册一个广播接收器:

private static final IntentFilter appUpdateIntentFilter = new IntentFilter();
static {
    appUpdateIntentFilter.addDataScheme("package");
    appUpdateIntentFilter.addAction(Intent.ACTION_PACKAGE_ADDED); 
}

private AppUpdateReceiver appUpdateReceiver = new AppUpdateReceiver();

那么如果你是从app B的服务开始下载,在服务的onCreate中注册,在onDestroy中停止:

private void registerBroadcastReceiver() {
    try {
        registerReceiver(appUpdateReceiver, appUpdateIntentFilter);
    } catch (IllegalArgumentException e) {
        // already registered
    }
}

private void unregisterBroadcastReceiver() {
    try {
        unregisterReceiver(appUpdateReceiver);
    } catch (IllegalArgumentException e) {
        // already unregistered
    }
}

class AppUpdateReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //if packageName is for app A then start an activity of app A
        int uid = intent.getIntegerExtra(Intent.EXTRA_UID);
        String appName = context.getPackageManager().getNameForUid(uid);
        if(appName.equals("com.appA.PackageName")) {
            //start an activity of app A 
        }
    }
}