我正在创建一个应用程序,只要用户接到电话,它就会打开另一个应用程序,并在电话结束时关闭该应用程序。
这是我的代码:
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时)?
谢谢。
答案 0 :(得分:0)
是的,您可以杀死任何进程。
拥有应用程序进程ID后,只需传入此函数即可:
Process.killProcess( APP-PROCESS-ID )
请注意,应从Android导入流程类:
import android.os.Process
如果您知道应用程序的软件包名称,也可以尝试以下方法:
ActivityManager am = (ActivityManager)
getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
am.killBackgroundProcesses("app-package-name");