4

私は 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);

ランチャーからアプリを使用するとすべて正常に動作しますが、インテント フィルターから起動されたタスクでは通知にバグがあります。インテント フィルターからタスクに関するメッセージを受信し、通知をタップすると、インテント フィルターからのアプリではなく、ランチャーからのアプリが再開されます。

ヒントはありますか?

ありがとう!

4

0 に答える 0