我有两个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");
}
};
答案 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();
}
}
};