我的设备中安装了一个应用程序。我正尝试使用以下代码从另一个应用程序B的按钮启动此应用程序A:
Button buttonStart = (Button)findViewById(R.id.buttonStart);
buttonStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setClassName("co.abc.android.test",
"co.abc.android.test.Abc");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
以下是我的问题:
我启动了应用程序A
我按下主页按钮
从应用程序B的按钮点击,我再次启动应用程序A
在提到这个问题时,我已经在许多地方读到使用 Intent.FLAG_ACTIVITY_CLEAR_TOP 来解决这个问题。但是,因为我从一个我无法访问其上下文的地方调用app A的意图,它会给我以下错误。
01-01 00:09:54.694: ERROR/AndroidRuntime(283): *** FATAL EXCEPTION IN SYSTEM PROCESS: WindowManagerPolicy
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
at android.app.ContextImpl.startActivity(ContextImpl.java:884)
at com.android.internal.policy.impl.LockScreen$DialerMethods.onTrigger(LockScreen.java:218)
at com.android.internal.widget.multiwaveview.Dialer$2.run(Dialer.java:366)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at com.android.server.wm.WindowManagerService$PolicyThread.run(WindowManagerService.java:752)
如何解决此问题,以便当我按下返回按钮时,我再次看不到相同的活动(如果之前已启动)?
非常感谢任何帮助。
答案 0 :(得分:1)
尝试在onClick
方法内添加:
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
答案 1 :(得分:0)
启动另一个应用程序的最佳方式是:
Intent intent = new Intent();
intent.setClassName("co.abc.android.test", "co.abc.android.test.Abc");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(intent);
这模拟了当用户从可用应用列表中选择应用时Android的功能。
假设“co.abc.android.test.Abc”是该应用程序的根活动(即:具有intent-filter ACTION_MAIN/CATEGORY_LAUNCHER
的那个),这将启动应用程序(如果不是已经运行)或者只是将应用程序从后台运行到前台(如果它已在运行)。