如何从android中的另一个应用程序关闭应用程序

时间:2016-02-15 15:55:29

标签: android android-intent android-activity

我有两个Android应用程序。我从App1开始活动,当App2活动完成后,我在App1 onActivityResult()中获得结果。 现在我想要的是,如果我已经打开App2活动并且还没有完成,如果我在App1中得到一些请求来关闭App2活动,那么我关闭它而不返回任何结果。

我做了什么,如果我将来自App1的“close_activity”信号发送到App2活动,就像那样:

 Log.i(TAG, "stoping app..");
    try {

        Intent intent = mContext.getPackageManager().getLaunchIntentForPackage("com.company.communicationApp");
        intent.setAction("CANCEL_CALL");
         context.startActivity(intent);
    } catch (Exception e) {
        Log.e(TAG, "Unable stop app", e);
    }

我想只有一种方法可以通过这种方式将intenet发送到正在运行的活动中。所以这将再次开始新的活动。 App2活动不是singleTask,因为如果我将它设置为singleTask,当App2活动结束时(),我无法在App1 onActivityResult中获得结果。  任何提示我如何关闭当前的运行活动。

-----------------------------使用BroadcastReceiver ---------------- ------

在App1活动中将意图发送为广播:

   try {
        final Intent intent = new Intent();
        intent.setAction("CANCEL_CALL");
        intent.setComponent(new ComponentName("com.hos.hp.talk", "com.hos.hp.talk.MainActivity"));

        mContext.sendBroadcast(intent);
    } catch (Exception e) {
        Log.e(TAG, "Unable stop communication app", e);
    }

在App2中我将BroadcastReceiver注册为:

 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    super.init();

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("CANCEL_CALL");
    registerReceiver(receiver, intentFilter);

}
 private BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("ddd");
    }
};

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

这就是我解决这个问题的方法。发送意图:

        Intent intent = new Intent("com.hp.walk.CLOSE_APPLICATION");
    getApplication().sendBroadcast(intent);

在另一个应用程序中,这是我如何注册接收器以获得意图:

@Override
public void onCreate(Bundle savedInstanceState) {

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("com.hp.walk.CLOSE_APPLICATION");
    registerReceiver(receiver, intentFilter);



 private BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if ("com.hp.walk.CLOSE_APPLICATION".equals(intent.getAction())) {
            Log.i(TAG, "received.. ");
            finish();
        }
    }
};