我正在构建一个基于 PhoneGAP 的应用程序,我需要在其中拨打电话,然后在 5 秒后返回我的应用程序。
关于拨打电话的部分工作正常。为了让 Android 通过呼叫而不只是拨号盘打开,拨打电话的代码放在 com.phonegap.api.Plugin 中,看起来像
private void callNumber(String phoneNumber){
Uri calling = Uri.parse("tel:" + phoneNumber);
Intent callIntent = new Intent(Intent.ACTION_CALL, calling);
this.ctx.startActivity(callIntent);
}
要重新启动应用程序,我AsyncTask
在调用 RestartTask 之前启动了一个。因为这段代码存在于插件中,所以我必须使用Activity.runOnUiThread
来启动 RestartTask,但除此之外没有什么特别的。
在 RestartTask 中,只doInBackground
实现了方法,它所做的只是休眠 5 秒,然后运行以下意图:
Intent restartIntent = new Intent(DialerPlugin.this.ctx.getBaseContext(), MainActivity.class);
restartIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
DialerPlugin.this.ctx.startActivity(restartIntent);
这MainActivity
是从 PhoneGAP 派生的主类,它扩展了DroidGap
.
设置 FLAG_ACTIVITY_CLEAR_TOP 和 FLAG_ACTIVITY_SINGLE_TOP 正是人们所说的这里和这里应该设置,如果要“重新激活”活动,这意味着使用当前实例化活动的任务而不是创建新任务,并且活动与它的运行状态一起重用,而不是创建一个新的活动实例。onNewIntent
当操作系统传递意图时,会调用“旧”活动。
但是,当电话呼叫处于活动状态并且似乎意图未传递给 时,没有任何反应MainActivity
,直到我挂断其中一部电话。奇怪的。
如果我将标志更改为 include FLAG_ACTIVITY_CLEAR_TOP
,则会重新启动应用程序任务或主要活动。但是由于这是PhoneGAP,两者都对应于重新启动应用程序,这不是我想要的。我还可以让 Android 在另一个任务中启动我的应用程序的一个全新实例,该任务被赋予焦点。
但是,我不能让 Android 将焦点重新放在我的主要活动上。我究竟做错了什么?
谢谢!