私は SocketIO に基づいて Android 用のマルチ ルーム チャット アプリケーションを開発しています。これは私の最初の Android アプリなので、ばかげたことを見逃しているかもしれません。アプリの構造は、基本的にホーム画面のアクティビティと、SocketIO サーバーに接続してチャット インターフェイスを提供するアクティビティです。
このアプリケーションは、「ルーム」フィールドがすでに入力された状態でチャット アプリケーションを起動するために、特別な一致リンクを開くためのインテント フィルターを提供します。これらの「特別なリンク」の 1 つを開くと、アプリが新しいタスクで起動されるため、同時に 2 つのチャット セッションを実行できます。
インテント フィルタ コード
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http"
android:host="mychat.example.com"
android:pathPrefix="/mychat/room/" />
</intent-filter>
通知以外はすべて正常に動作しています。すべての通知には、新しいメッセージが到着した場合にチャット セッションを再開するための PendingIntent が関連付けられています。再開するには、Intent.FLAG_ACTIVITY_SINGLE_TOP を使用しています。アプリを再開するためのコードは次のとおりです
Intent intent = new Intent(getApplicationContext(), Room.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
mNotifyBuilder.setContentText(message.toString()).setNumber(++notificationMessages);
Notification note = mNotifyBuilder.setContentIntent(pIntent).build();
note.flags |= Notification.FLAG_AUTO_CANCEL;
mNotificationManager.notify(notificationID, note);
ランチャーからアプリを使用するとすべて正常に動作しますが、インテント フィルターから起動されたタスクでは通知にバグがあります。インテント フィルターからタスクに関するメッセージを受信し、通知をタップすると、インテント フィルターからのアプリではなく、ランチャーからのアプリが再開されます。
ヒントはありますか?
ありがとう!