Я запускаю свои уведомления с консоли FCM и через HTTP / JSON ... с тем же результатом.
Я могу обрабатывать заголовок, полное сообщение, но значок всегда представляет собой белый круг по умолчанию :
Вместо моего пользовательского значка в коде (setSmallIcon или setSmallIcon) или значка по умолчанию из приложения:
Intent intent = new Intent(this, MainActivity.class);
// use System.currentTimeMillis() to have a unique ID for the pending intent
PendingIntent pIntent = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), intent, 0);
if (Build.VERSION.SDK_INT < 16) {
Notification n = new Notification.Builder(this)
.setContentTitle(messageTitle)
.setContentText(messageBody)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentIntent(pIntent)
.setAutoCancel(true).getNotification();
NotificationManager notificationManager =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//notificationManager.notify(0, n);
notificationManager.notify(id, n);
} else {
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
Notification n = new Notification.Builder(this)
.setContentTitle(messageTitle)
.setContentText(messageBody)
.setSmallIcon(R.drawable.ic_stat_ic_notification)
.setLargeIcon(bm)
.setContentIntent(pIntent)
.setAutoCancel(true).build();
NotificationManager notificationManager =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//notificationManager.notify(0, n);
notificationManager.notify(id, n);
}
Какие миллисекунды? Вы предоставляете только информацию минут в первом примере, тогда как Ваш второй пример захватывает текущую дату от системы с миллисекундами, что это, Вы ищете?
String date = "06-04-2007 07:05:00.999";
SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss.S");
Date myDate = fmt.parse(date);
System.out.println(myDate);
long timestamp = myDate.getTime();
System.out.println(timestamp);
согласитесь с вышеупомянутым, не должно быть никаких миллисекунд...
Поскольку простой формат даты, который Вы указали, отбрасывает миллисекунды. Таким образом, получающийся объект Даты не имеет той информации. Таким образом, когда Вы распечатываете его, его весь 0s.
С другой стороны, объект Даты действительно сохраняет миллисекунды, когда Вы присваиваете ему значение с миллисекундами (в этом случае, с помощью новой Даты ()). Таким образом, при распечатывании их это содержит millisecs также.
При парсинге даты, она только использует информацию, которую Вы предоставляете. В этом случае это только знает MM-dd-yyyy HH:mm.
Создание нового объекта даты возвращает текущую системную дату / время (количество миллисекунд с эпохи).
Вместо того, чтобы пользоваться библиотеками Sun JDK Time/Date (которые оставляют желать лучшего) я рекомендую смотреть на http://joda-time.sourceforge.net.
Это - очень сформировавшийся и активный проект SourceForge и имеет очень изящный API.
toString () объекта Даты не показывает Вам миллисекунды... Но они там
Таким образом, новая Дата () является объектом с разрешением миллисекунды, как видно:
System.out.printf( "ms = %d\n", myDate.getTime() % 1000 ) ;
Однако при построении даты с SimpleDateFormat никакие миллисекунды не передаются ему
Я пропускаю вопрос здесь?
[редактирование], Ха-ха-ха... слишком медленное ;)
getTime()
метод Date
возвращает количество миллисекунд с 1 января 1970 (эту дату называют "эпохой", потому что все компьютерные даты базируются прочь этой даты). Это не должно использоваться для отображения человекочитаемой версии Даты.
Используйте SimpleDateFormat.format()
метод вместо этого. Вот исправленная версия части Вашего кода, что я думаю, может решить Вашу проблему:
String date = "06-04-2007 07:05:23:123";
SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss:S");
Date myDate = fmt.parse(date);
System.out.println(myDate); //Mon Jun 04 07:05:23 EDT 2007
String formattedDate = fmt.format(myDate);
System.out.println(formattedDate); //06-04-2007 07:05:23:123
Date.getTime возвращает количество миллисекунд с 1 января 1970, 0:00:00, которое GMT представил объектом Даты. Так "04.06.2007 7:05" - "01.01.1970 0:00" равно 1180955340000 миллисекундам. Так как единственное беспокойство Вашего вопроса о части времени даты, грубый образ мыслей этого вычисления является количеством миллисекунд между 7:05 и 0:00, который является 25500000. Это является равномерно делимым 1 000, так как никакое время не имеет миллисекунд.
На второй дате это использует текущее время, когда та строка кода выполняется. Это будет использовать то, что текущие миллисекунды мимо текущей секунды находятся в вычислении. Поэтому Date.getTime больше, чем, вероятно, возвратит число, которое не является равномерно делимым 1 000.
import java.util.*;
public class Time {
public static void main(String[] args) {
Long l = 0L;
Calendar c = Calendar.getInstance();
//milli sec part of current time
l = c.getTimeInMillis() % 1000;
//current time without millisec
StringBuffer sb = new StringBuffer(c.getTime().toString());
//millisec in string
String s = ":" + l.toString();
//insert at right place
sb.insert(19, s);
//ENJOY
System.out.println(sb);
}
}