在Android中以编程方式杀死另一个应用及其所有服务

时间:2018-09-24 21:20:41

标签: android android-lifecycle kill-process

我正在创建一个应用程序,只要用户接到电话,它就会打开另一个应用程序,并在电话结束时关闭该应用程序。

这是我的代码:

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 :(得分:0)

是的,您可以杀死任何进程。

  1. 查找应用进程ID
  2. 杀死它。

拥有应用程序进程ID后,只需传入此函数即可:

Process.killProcess( APP-PROCESS-ID )

请注意,应从Android导入流程类:

import android.os.Process

如果您知道应用程序的软件包名称,也可以尝试以下方法:

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