3

アンドロイドの通知に問題があります。通知evrytimeをクリックするたびに同じアクティビティを再度呼び出す必要がありますが、新しいアクティビティが呼び出されると思っている限り、前のアクティビティもバックエンドで実行されています。私のコードは何度も実行されています(複数のインスタンスのbecoz)

通知がクリックされるたびに複数のインスタンスを解決または閉じる方法を教えてください。

コード

public void NotificationforChat(CharSequence message、String toJid、int NotificationID){

    int notificationCount = 1;
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
    int icon = R.drawable.ic_launcher;
    CharSequence tickerText = message;
    long when = System.currentTimeMillis();
    Notification notification = new Notification(icon, tickerText, when);
    //notification.number = notificationCount++;
    Context context = getApplicationContext();



    CharSequence contentTitle = "Chat";
    CharSequence contentText = message;
    Intent notificationIntentforChat = new Intent(this, UserChatActivity.class);
    notificationIntentforChat.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

    notificationIntentforChat.putExtra("userNameVal", toJid);       
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
            notificationIntentforChat, PendingIntent.FLAG_UPDATE_CURRENT);
    notification.setLatestEventInfo(context, contentTitle, contentText,
            contentIntent);
    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    notification.defaults = Notification.DEFAULT_ALL;   
    mNotificationManager.notify(notificationID, notification);
}

ありがとう

4

4 に答える 4

1

そのアクティビティの以下のコードを maifest に入れます。

android:launchMode="singleTop"

次に、アクティビティが再度呼び出されたときに新しい変更を処理するために、次のメソッドをオーバーライドします。

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);      
    //Do your new intent handling here.     
}

マニフェストに配置したコードにより、そのアクティビティのインスタンスが 1 つだけ作成されるようになります。また、そのアクティビティの onNewIntent オーバーライド メソッドで、新しいインテントに必要な変更を処理できます。

于 2012-11-16T05:59:20.423 に答える
1

アクティビティの複数のインスタンスを防ぐため。

android:launchMode="singleTask"アクティビティで使用できます

<activity
            android:launchMode="singleTask"
            android:name=".UserChatActivity"
            android:label="Your title" > 

....
</activity>

一度呼んだら。はonNewIntent(Intent)新しいインテントでトリガーされます

    @Override
    protected void onNewIntent(Intent intent) {

       super.onNewIntent(intent);      


    }
于 2012-11-16T06:02:16.847 に答える
1

android:launchMode="singleInstance"モードまたは モードでアクティビティを開始するのはどうですかandroid:launchMode="singleTop"。これが役立つと思います。

于 2012-11-16T06:07:21.940 に答える
0

呼び出しインテントに追加

mIntent. setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

メニフェストのアクティビティに追加

android:launchMode="singleTop"
于 2016-03-03T12:13:27.577 に答える