当我发送多个推送通知时,我需要将它们全部显示在按发送desc的时间排序的通知栏中。我知道我应该使用唯一的通知-
我尝试生成随机数,但这不能解决我的问题,因为我需要对它们进行订购。我尝试使用AtomicInt
,但仍然没有得到想要的结果。
package com.mypackage.lebadagency;
import java.util.concurrent.atomic.AtomicInteger;
import android.app.IntentService;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import android.widget.RemoteViews;
import com.google.android.gms.gcm.GoogleCloudMessaging;
public class GCMNotificationIntentService extends IntentService {
private AtomicInteger c = new AtomicInteger(0);
public int NOTIFICATION_ID = c.incrementAndGet();
private NotificationManager mNotificationManager;
NotificationCompat.Builder builder;
public GCMNotificationIntentService() {
super("GcmIntentService");
}
public static final String TAG = "GCMNotificationIntentService";
@Override
protected void onHandleIntent(Intent intent) {
Bundle extras = intent.getExtras();
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
String messageType = gcm.getMessageType(intent);
if (!extras.isEmpty()) {
if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR
.equals(messageType)) {
sendNotification("Send error: " + extras.toString());
} else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED
.equals(messageType)) {
sendNotification("Deleted messages on server: "
+ extras.toString());
} else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE
.equals(messageType)) {
for (int i = 0; i < 3; i++) {
Log.i(TAG,
"Working... " + (i + 1) + "/5 @ "
+ SystemClock.elapsedRealtime());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
}
}
Log.i(TAG, "Completed work @ " + SystemClock.elapsedRealtime());
sendNotification(""
+ extras.get(Config.MESSAGE_KEY));
Log.i(TAG, "Received: " + extras.toString());
}
}
GcmBroadcastReceiver.completeWakefulIntent(intent);
}
private void sendNotification(String msg) {
Log.d(TAG, "Preparing to send notification...: " + msg);
mNotificationManager = (NotificationManager) this
.getSystemService(Context.NOTIFICATION_SERVICE);
//here start
Intent gcmintent = new Intent(this, AppGcmStation.class);
gcmintent.putExtra("ntitle", msg);
gcmintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
int requestID = (int) System.currentTimeMillis();
//here end
PendingIntent contentIntent = PendingIntent.getActivity(this, requestID,
gcmintent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
this).setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("my title")
.setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
.setContentText(msg);
mBuilder.setAutoCancel(true);
mBuilder.setTicker(msg);
mBuilder.setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 });
mBuilder.setLights(Color.RED, 3000, 3000);
mBuilder.setContentIntent(contentIntent);
mBuilder.setDefaults(Notification.DEFAULT_SOUND);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
Log.d(TAG, "Notification sent successfully.");
}
}
我需要最好和最简单的方法来生成一个int ID,该ID可以递增以将其分配为通知ID。
您为所有通知使用相同的通知ID(值始终为1)。您可能应该将通知ID分离到单独的单例类中:
public class NotificationID {
private final static AtomicInteger c = new AtomicInteger(0);
public static int getID() {
return c.incrementAndGet();
}
}
然后在代码中使用NotificationID.getID()
代替NOTIFICATION_ID
。
编辑:正如@racs在评论中指出的那样,如果您的应用程序进程被杀死,上述方法不足以确保行为正确。至少AtomicInteger
应从某些活动的保存状态(而不是从0开始)初始化的初始值。如果通知ID在应用程序的重新启动期间需要唯一(同样,应用程序进程可能会被终止),则最新值应在每次增量后保存在某个位置(可能保存到共享首选项),并在应用启动时恢复。
问题 你想随机生成一个唯一的标识符。 解决方案 可以根据一个随机数值生成一个 Base 36 编码的字符串。 uniqueId = (length=8) -> id = "" id += Math.random().toString(36).substr(2) while id.length < length id.substr 0, length uniqueId() # =
我想了解一下如何从java对象集合中生成唯一的id(字符串/数字等),这些对象可以是各种数据类型,如String、BigDecimal、org。乔达。时间本地日期或组织。乔达。时间LocalDateTime或任何自定义java对象。 生成的id应该基于java对象中的值,以便为具有相同值的两个集合生成相同的id。类似于sql group by子句的内容。我想从group by(col1、col2、
问题内容: 我有一个带有String的对象,该对象具有唯一的id。(例如“ ocx7gf”或“ 67hfs8”),我需要为其提供int hascode()的实现,该实现显然是唯一的。 如何以最简单/最快的方式将字符串转换为唯一的int? 10倍 编辑-确定。我已经知道String.hashcode是可能的。但是不建议在任何地方使用。实际上’,如果不建议使用其他任何方法- 如果我的对象在集合中并且需
问题内容: 如何使用数据库查询回调设置变量值?我该怎么办? 问题答案: 自从使用node.js已经有一段时间了,但是我想我可以提供帮助。 首先,在node中,您只有一个线程,应该使用回调。您的代码将发生的情况是查询将排队等待执行,但是循环将毫无意义地连续作为繁忙循环运行。 您应该可以通过以下回调来解决您的问题: 并这样使用 我在大约2年内没有编写任何node / js的代码,也没有进行测试,但是基
问题内容: 我正在使用PHP和MySQL编写脚本,并且想要获得一个唯一的ID(由字符串组成:大写字母和带数字的小写字母),例如:。我在PHP中发现了许多可以生成此类数字的函数,但我担心如何确保id唯一! 更新 :uuid很长,我的意思是这样的ID:(P5Dc)一个11个字母数字的字符。 问题答案: 一个 编程的方式 可以是: 在字段中添加一个唯一索引 在PHP中生成随机字符串 在PHP中循环(wh
本文向大家介绍PHP生成唯一ID之SnowFlake算法,包括了PHP生成唯一ID之SnowFlake算法的使用技巧和注意事项,需要的朋友参考一下 前言:最近需要做一套CMS系统,由于功能比较单一,而且要求灵活,所以放弃了WP这样的成熟系统,自己做一套相对简单一点的。文章的详情页URL想要做成url伪静态的格式即xxx.html 其中xxx考虑过直接用自增主键,但是感觉这样有点暴露文章数量,有同学