0

Web サービスを使用してサーバーに接続する android サービスがあり、サービスは多くの json オブジェクトを返します。オブジェクトごとに通知を実行したいのですが、すべてを実行しましたが、サーバーを考えても通知が 1 つしか表示されないという問題があります。 2 つのオブジェクトを送信しています。ループを見てくださいfor。私が多くの通知を呼び出していることは明らかですが、なぜ 1 つしか表示されないのですか?

public class GetOffersService extends Service {

    @Override
    public void onCreate() {
        super.onCreate();
        Client client = new Client("http://" + Configuration.hostIP
                + ":8080/test2/ssssss/");
        String str = client.getBaseURI("offers");
        try {
            JSONArray json = new JSONArray(str);
            for (int i = 0; i < json.length(); i++) {
                JSONObject oneOffer = json.getJSONObject(i);
                int offerID = oneOffer.getInt("ID");
                String offerDescriptoin = oneOffer.getString("Description");
                String endDate = oneOffer.getString("EndDate");
                String startDate = oneOffer.getString("StartDate");
                JSONObject restaurant = oneOffer.getJSONObject("Restaurant");
                int restaruantID = restaurant.getInt("ID");
                String restaurantName = restaurant.getString("Name");
                Intent intent = new Intent(this, OfferNotification.class);
                PendingIntent pIntent = PendingIntent.getActivity(this, 0,
                        intent, 0);
                Uri soundUri = RingtoneManager
                        .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
                        this).setSmallIcon(R.drawable.ic_launcher)
                        .addAction(R.drawable.ic_launcher, "call", pIntent)
                        .addAction(R.drawable.ic_launcher, "more", pIntent)
                        .addAction(R.drawable.ic_launcher, "add more", pIntent)
                        .setContentTitle("The Eattel")
                        .setContentText("New Offer!").setSound(soundUri);
                // Creates an explicit intent for an Activity in your app
                Intent resultIntent = new Intent(this, OfferNotification.class);

                TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);

                stackBuilder.addParentStack(OfferNotification.class);

                stackBuilder.addNextIntent(resultIntent);
                PendingIntent resultPendingIntent = stackBuilder
                        .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
                mBuilder.setContentIntent(resultPendingIntent);
                NotificationManager mNotificationManager = (NotificationManager) getSystemService(Signin.NOTIFICATION_SERVICE);

                mNotificationManager.notify(100, mBuilder.build());
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

}
4

3 に答える 3

3

これはドキュメントからのものです:

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

太字の部分は、ケースで通知が 1 つしか表示されない理由を説明しています

したがって、次のように思われます。

 mNotificationManager.notify(100, mBuilder.build());

あなたのコードの欠陥です。

100 をアイテムごとに異なる ID に置き換えます。

 mNotificationManager.notify(someUniqueId, mBuilder.build());
于 2013-06-02T09:13:35.743 に答える
0

ガイドラインに従わないのはあなた次第ですが、それはとても悲しいことです。よく考えて、私の以前の回答を検討してください。

少なくともドキュメントを読んでください:

ステータスバーに表示される通知を投稿します。同じIDの通知がアプリケーションによってすでに投稿されていて、まだキャンセルされていない場合は、更新された情報に置き換えられます.

したがって、次のように思われます。

 mNotificationManager.notify(100, mBuilder.build());

あなたのコードの欠陥です。

100 をアイテムごとに異なる ID に置き換えます。

于 2013-06-02T08:42:52.340 に答える