2016-06-08 3 views
0

Я хочу создать постоянное уведомление о строке состояния (например, текущий уровень заряда батареи - он всегда есть), но значок будет меняться каждый день в 00:00.Измените уведомление о статусе состояния Android каждый день

Кроме того, я хочу, чтобы это уведомление автоматически оповещалось после перезагрузки устройства, а не только после того, как пользователь открыл приложение.

Я создал уведомление в MainActivity, но не знаю, как сделать его предупреждением после перезагрузки, а также я не знаю, как его менять каждый день в полночь.

Я попытался создать AlarmService и широковещательный приемник, но он запускается каждые 5 секунд, и это слишком много, поэтому я удалил его.

Мой текущий код:

  NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) 
       .setContentTitle(getString(R.string.notificationTitle)) 
       .setContentText(....) 
       .setLargeIcon(largeIconBitmap) 
       .setSmallIcon(getResources().getIdentifier("icon_status_" + myHelper.getCurrentImageNumber(),"drawable", getPackageName())); // change the icon at mid-night. 'getCurrentImageNumber' should get me the right icon number 

      Intent resultIntent = new Intent(this, MainActivity.class); 
      PendingIntent resultPendingIntent = PendingIntent.getActivity(this,0,resultIntent,PendingIntent.FLAG_UPDATE_CURRENT); 
      mBuilder.setContentIntent(resultPendingIntent); 
      Notification notification = mBuilder.build(); 
      notification.flags |= Notification.FLAG_NO_CLEAR | Notification.FLAG_ONGOING_EVENT; 


      mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
      mNotifyMgr.notify(mylHelper.myRequestCode, notification); 

Прямо сейчас я вижу уведомления, но значок не меняется, и это не сигнал тревоги после перезагрузки. Я видел несколько ответов в stackoverflow, но мне ничего не помогло.

ответ

1

Я не дам вам весь код, вам нужно будет научиться.

Вот что вы должны сделать:

1 Используйте сервис для запуска уведомления и поддерживать логику обновления. Если уведомление уже существует, вы можете обновить существующее или программно уволить его и заменить новым.

2 Зарегистрируйте широковещательный приемник в AndroidManifest.xml с несколькими фильтрами намерений, чтобы запустить службу.

<receiver android:name=".myReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.TIME_TICK" /> 
    </intent-filter> 

    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

3 Создайте класс, который расширяет класс вещательного приемника и использует и запускает вышеуказанную услугу.

+0

Нужно ли регистрировать мою службу в AndroidManifest.xml тоже? вчера это было то, что заставило его работать каждые 5 секунд. – TamarG

+0

Да, вам также нужно зарегистрировать его здесь. У вас будет широковещательный приемник, который запускает службу в ответ на получение одного из двух вышеуказанных фильтров намерений (TIME_TICK, BOOT_COMPLETED). Ваш вещательный приемник должен иметь логику только для запуска службы, если время 00:00 или ваше устройство только что загрузилось. Если вам нравится больше предложений, добавьте еще какой-нибудь код! – apelsoczi

Смежные вопросы