Я использую пользовательский RemoteView для AndroidNotification, и я хотел бы имитировать поведение системы.
Как Android обновляет формат времени уведомления – они когда-либо меняются после их установки? Как я могу имитировать это поведение?
Я не уверен, что вы все еще ищете ответы, учитывая, что вы сами предоставили их. Однако, если вы хотите достичь своей первоначальной цели, вы, вероятно, захотите
Итак, некоторый код немного напоминает это:
class MyCleverThing extends Service (say) { // Your stuff here private static IntentFilter timeChangeIntentFilter; static { timeChangeIntentFilter = new IntentFilter(); timeChangeIntentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED); timeChangeIntentFilter.addAction(Intent.ACTION_TIME_CHANGED); } // Somewhere in onCreate or equivalent to set up the receiver registerReceiver(timeChangedReceiver, timeChangeIntentFilter); // The actual receiver private final BroadcastReceiver timeChangedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (action.equals(Intent.ACTION_TIME_CHANGED) || action.equals(Intent.ACTION_TIMEZONE_CHANGED)) { updateWidgets(); // Your code to rebuild the remoteViews or whatever } } };
Я мало знаю о формате времени уведомления, но если вы хотите подражать их поведению, следует взглянуть на класс DateUtils
, особенно форматSameDayTime, который, как я думаю, делает то, что вы описали.
Невозможно обновить уведомление после добавления, если .notify вызывается снова с тем же идентификатором.
Если вы используете отметку времени, лучше использовать собственный Notification NotificationCompat.Builder без использования RemoteView.
Каждый раз, когда вы обновляете свое уведомление, делайте что-то простое (24 часа) …
public void updateNotifTime(RemoteViews customNotifView){ Date currentTime = new Date(); int mins = currentTime.getMinutes(); String minString = ""; if(mins<10){ minString = "0"; } minString += mins; customNotifView.setTextViewText(R.id.time, currentTime.getHours()+":"+minString); }