私は 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);
これは、 PhoneGAPMainActivity
から派生したメイン クラスであり、拡張されていますDroidGap
。
FLAG_ACTIVITY_CLEAR_TOP と FLAG_ACTIVITY_SINGLE_TOP を設定することはまさに人々がここで言っていることであり、アクティビティを「再アクティブ化」する場合はここで設定する必要があります。つまり、アクティビティが現在インスタンス化されているタスクが新しいタスクを作成する代わりに使用され、アクティビティが新しいアクティビティ インスタンスを作成する代わりに、実行中の状態で再利用されます。onNewIntent
OS によってインテントが配信されると、「古い」アクティビティが呼び出されます。
ただし、電話がアクティブになっても何も起こらずMainActivity
、いずれかの電話で電話を切るまで、インテントが に配信されていないようです。変。
フラグを include に変更するとFLAG_ACTIVITY_CLEAR_TOP
、アプリ タスクまたはメイン アクティビティのいずれかが再開されます。ただし、これは PhoneGAP であるため、どちらもアプリの再起動に対応しており、これは私が望んでいたことではありません。また、フォーカスを与えられた別のタスクで、アプリのまったく新しいインスタンスを Android で起動させることもできます。
ただし、Android をメイン アクティビティにフォーカスさせることはできません。私は何を間違っていますか?
ありがとう!