Автозапуск приложений из моего приложения

Есть необходимость запускать приложения при запуске моего приложения с возвратом на экран моего приложения. Запуск из сервиса. Андроид 10. Использую след.код

class MyRunnable_2 implements Runnable {
    private final String task;

    MyRunnable_2(String task) {
        this.task = task;
    }

    @Override
    public void run() {
        Intent intent = new Intent();
        intent.setPackage(task);

        PackageManager pm = getPackageManager();
        List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0);
        Collections.sort(resolveInfos, new ResolveInfo.DisplayNameComparator(pm));

        if (resolveInfos.size() > 0) {
            try {
                ResolveInfo launchable = resolveInfos.get(0);
                ActivityInfo activity = launchable.activityInfo;
                ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
                Intent i = new Intent(Intent.ACTION_MAIN);
                i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
                i.setComponent(name);
                startActivity(i);
            } catch (SecurityException e) {
                intent = getPackageManager().getLaunchIntentForPackage(task);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
                intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
                intent.addCategory(Intent.CATEGORY_LAUNCHER);
                startActivity(intent);
            }
        }
    }
}

public void _start_app_run() {
    ExecutorService executor = Executors.newSingleThreadExecutor();
    for (int j = 1; j < 4; j++) {
        if (!app_name_start[j].equals("")) {
            Runnable worker = new MyRunnable_2(app_package_start[j]);
            executor.execute(worker);
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                new Handler(Looper.getMainLooper()).post(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(), "Ошибка запуска приложения", Toast.LENGTH_LONG).show();
                    }
                });
                e.printStackTrace();
            }
        }
    }
    Runnable worker = new MyRunnable_2("мойпакет");
    executor.execute(worker);
    executor.shutdown();
}

Проблема в том, что хочет запустит все приложения, и вернется на экран, или два запустит и остановится на запущенном стороннем приложении. Как заставить выполнять то, что я хочу?


Ответы (0 шт):