2

メッセージを受信し、受信時に通知するアプリケーションを実装しています。Whatsapp に似た通知システムを実装したいと考えています。メッセージを 1 つしか受信しない場合、メッセージのタイトルが通知に表示されます。その後、別のメッセージを受信した場合、通知にはメッセージが 2 つあると表示される必要があります。

通知の以前の contentText を取得して、ユーザーが今までに受信したメッセージの数を知り、現在受信したメッセージの数を追加できるようにしたかったのですが、取得する方法が見つかりません。

これは android-developers で見つかりました:「オブジェクト メンバー フィールドを使用して各プロパティを変更できます (コンテキストと通知のタイトルとテキストを除く)。」これは contentText を取得できないということですか? 取得できない場合は、数値を静的クラスなどに保存する必要がありますか?

ありがとう!

4

2 に答える 2

1

あなたの質問への回答が遅れるかもしれませんが、これを一種の回避策と統合する方法は次のとおりです。

(1) アプリケーション内で、「未読メッセージ」をカウントする変数が必要です。を拡張するクラスを統合することをお勧めしますandroid.app.Application。これにより、複数のアクティビティなどで変数をグローバルに処理できます。以下に例を示します。

import android.app.Application;

public class DataModelApplication extends Application {

    // model
    private static int numUnreadMessages;
    // you could place more global data here, e.g. a List which contains all the messages

    public int getNumUnreadMessages() {
        return numUnreadMessages;
    }

    public void setNumUnreadMessages(int numUnreadMessages) {
        this.numUnreadMessages = numUnreadMessages;
    }

    ...
}

アプリケーションを に追加することを忘れないでくださいAndroidManifest:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:name="name.of.your.package.DataModelApplication" >

    <activity ... />
    ...
</application>

(2)新しいメッセージを受信するたびにセッターを使用して、ActivityまたはFragmentあなたがインクリメントします。numUnreadMessages

// within a Fragment you need to call activity.getApplication()
DataModelApplication application = (DataModelApplication) getApplication();
int numUnreadMessages = application.getNumUnreadMessages();
application.setNumUnreadMessages(++numUnreadMessages);

(3) これで、未読メッセージの数で通知を更新できます。

// within your service or method where you create your notification
Intent mainActivityIntent = new Intent(this, MainActivity.class);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, mainActivityIntent, 0);

DataModelApplication application = (DataModelApplication) getApplication();
int numMessages = application.getNumUnreadMessages();

// build the notification
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

// Sets an ID for the notification, so it can be updated
int notifyID = 1;
String contentTitle = "You have " + numMessages + " unread message(s)";
String contentText = "Click here to read messages";

Builder notifyBuilder = new NotificationCompat.Builder(this)
    .setContentTitle(contentTitle)
    .setContentText(contentText)
    .setContentIntent(pIntent)
    .setAutoCancel(true)
    .setNumber(numMessages) // optional you could display the number of messages this way
    .setSmallIcon(R.drawable.ic_launcher);

notificationManager.notify(notifyID, notifyBuilder.build());

(4) ユーザーがメッセージを読むたびに、またはユーザーがその通知をクリックしてアクティビティを開いた場合は、numUnreadMessages の値をリセットまたはデクリメントすることを忘れないでください。手順 (2) に似ていますが、値を減らすか、または に設定し0ます。

あなた/誰でも始めるのに役立つことを願っています:)

于 2013-11-27T08:40:27.847 に答える
-1

古い通知に使用された通知 ID と同じ通知メソッドを使用できます。

public void notify (文字列タグ、int id、通知通知) 導入されたバージョン: API レベル 5 ステータス バーに表示される通知を投稿します。同じタグとIDの通知がアプリケーションによってすでに投稿されていて、まだキャンセルされていない場合は、更新された情報に置き換えられます.

于 2012-07-18T15:16:54.957 に答える