android通知适用于循环中的一个对象[重复]

Posted

技术标签:

【中文标题】android通知适用于循环中的一个对象[重复]【英文标题】:android notification works for one object in a loop [duplicate] 【发布时间】:2013-06-02 08:23:44 【问题描述】:

我有一个使用 web 服务连接到服务器的 android 服务,该服务返回许多 json 对象,我想为每个对象运行通知,我做了所有这些但我有一个问题,我什至只看到一个通知认为服务器正在发送两个对象。请看for循环,很明显我调用了很多通知,为什么我只看到一个?

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;
    


【问题讨论】:

【参考方案1】:

请在此处阅读“堆栈通知”一章: http://developer.android.com/design/patterns/notifications.html

如果您的应用在另一个相同类型的通知仍处于挂起状态时创建通知,请避免创建全新的通知对象。而是堆叠通知。

堆叠的通知构建了一个摘要描述,并允许用户了解有多少特定类型的通知处于待处理状态。

不要:

做:

您可以使用扩展的摘要布局提供有关构成堆栈的各个通知的更多详细信息。这使用户可以更好地了解哪些通知处于待处理状态,以及它们是否足够有趣,可以在相关应用中详细阅读。

【讨论】:

我想要第一个案例,第一张图片,而不是第二张 当我有 30 位朋友给我发信息时,Facebook 会向我发送 30 条通知 Facebook laso 使用菜单按钮,不更新他们的 targetSdkVersion,他们的 facebook 主页收到如此糟糕的评价.. 和??? 我需要第二种情况【参考方案2】:

这是来自documentation:

public void notify (String tag, int id, Notification notification) 发布要在状态栏中显示的通知。 如果通知 您的应用程序已经发布了具有相同 ID 的 尚未取消,将替换为更新信息。

粗体部分解释了为什么在您的案例中只看到一个通知

所以,听起来很可能:

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

是你代码中的缺陷。

将 100 替换为每个项目的不同 id。

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

【讨论】:

你对我说坏话,我什么都没说,bty,我什至不能投票。你说shame one me,你说tell me to not download your app,你说了坏话 一个没有考虑到我花时间格式化的建议,链接到官方文档,放插图图片,回复 cmets 只是为了被忽视更痛苦.. 这是在发布另一个之前完成的回答..顺便说一句,这是我第二次给你答案:使用其他通知ID。我应该怎么做才能突出这个答案????【参考方案3】:

如果您不想遵循这些准则,这取决于您,但那非常可悲。 请三思而后行,考虑一下我之前的回答。

请至少阅读documentation:

发布要在状态栏中显示的通知。如果有通知 您的应用程序已经发布了具有相同 ID 的 尚未取消,将替换为更新的信息。

所以,听起来很可能:

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

是你代码中的缺陷。

将 100 替换为每个项目的不同 id。

【讨论】:

以上是关于android通知适用于循环中的一个对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

android面临崩溃报告仅适用于8.0和8.1中的firebase通知

适用于 Android 的 Bluemix 推送通知未发送任何通知

适用于 Android 的 Phonegap 本地通知插件

适用于 Android 的 Phonegap 推送通知

适用于 Android 的位置感知推送通知

Android 通知点击打开应用程序仅适用于第一次