Убить другое приложение и все его сервисы программно в Android - PullRequest
0 голосов
/ 25 сентября 2018

Я создаю приложение, которое включает другое приложение каждый раз, когда пользователь получает телефонный звонок, и выключает это приложение, когда телефонный звонок заканчивается.

Это мой код:

public class MyPhoneReceiver extends BroadcastReceiver {

@Override
public void onReceive( Context context, Intent intent ) {
    final String PROXIMITY_SERVICE_PACKAGE_NAME = "package_name";

    Bundle extras = intent.getExtras();
    String state = extras.getString( TelephonyManager.EXTRA_STATE );

    if (state.equals( TelephonyManager.EXTRA_STATE_RINGING ) ) {
        PackageManager packageManager = context.getPackageManager();
        context.startActivity( packageManager.getLaunchIntentForPackage(
                PROXIMITY_SERVICE_PACKAGE_NAME ) );
    }

    if ( state.equals(TelephonyManager.EXTRA_STATE_IDLE ) ) {
        killProcess(context, PROXIMITY_SERVICE_PACKAGE_NAME);
    }
}

В настоящее время метод killProcess реализован следующим образом:

private void killProcess(Context context, String packageName)
{
    ActivityManager am = (ActivityManager)context.getSystemService(Activity.ACTIVITY_SERVICE);
    am.killBackgroundProcesses(packageName);
}

Я также запрашиваю разрешение на уничтожение фоновых приложений в манифесте.:

<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />

Открытие приложения работает, но закрытие приложения - нет.Я знаю, что достигну кода в killProcess, но это не убивает приложение.Это проблема с разрешениями?Разве мне не разрешено убивать другой процесс?даже не процесс, который я создал?

Или, возможно, из того, что я знаю о процессе, который я запускаю, он создает сервис, который выполняет всю работу за него.Может быть проблема в том, что сервис не прекращается?

Есть ли способ завершить этот процесс и все связанные с ним службы и подпроцессы (например, когда вы выполняете FORCE STOP в настройках)?

Спасибо.

1 Ответ

0 голосов
/ 25 сентября 2018

Да, вы можете убить любой процесс.

  1. Найти идентификатор процесса приложения
  2. Убить его.

Как только у вас будет идентификатор процесса приложения,просто передайте эту функцию:

Process.killProcess( APP-PROCESS-ID )

Обратите внимание, что класс процесса должен быть импортирован из Android:

import android.os.Process

Вы также можете попробовать это, если знаете имя пакета приложения:

ActivityManager am = (ActivityManager)
getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
am.killBackgroundProcesses("app-package-name");
...