2012-06-21 3 views
3

Я пытаюсь поместить уведомление в строку состояния при запуске службы и сохранить ее там, пока я не остановлю службу, но исчезнет через несколько секунд (около 10). Любые предложения относительно того, чего я не хватает? Это работало до того, как я попытался перезаписать с помощью notification.builder для совместимости с api 15. Запись журнала показывает, что onDestroy не вызывается до тех пор, пока я не остановлю службу, чтобы она все еще работала.onGoing уведомление исчезает через несколько секунд

public class MyService extends Service { 
    private NotificationManager mNM; 
    private int NOTIFICATION = R.string.service_started; 

public void onCreate() { 
    super.onCreate(); 
    mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
    showNotification(); 
} 
@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.e("MyService", "Service Started"); 
    return START_STICKY; 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    mNM.cancel(NOTIFICATION); 
    Log.e("MyService", "Service Ended"); 
} 

@Override 
public IBinder onBind(Intent intent) { 
    return mBinder; 
} 

private final IBinder mBinder = new LocalBinder(); 

private void showNotification() { 

    Notification.Builder builder = new Notification.Builder(getApplicationContext()); 
    builder.setAutoCancel(false) 
      .setOngoing(true) 
      .setSmallIcon(R.drawable.myicon) 
      .setTicker(getText(R.string.service_label)) 
      .setWhen(System.currentTimeMillis()) 
      .setContentTitle(getText(R.string.service_started)) 
      .setContentText(getText(R.string.service_label)); 
    Notification notification = builder.getNotification(); 
    mNM.notify(NOTIFICATION, notification); 
} 
+0

Является ли ваше обслуживание разрушенным по какой-то причине? Я вижу, что в onDestroy вы удаляете свое уведомление. Где вы называете showNotification()? – petey

+0

К сожалению, я должен был отредактировать эту строку при вставке вопроса. showNotification вызывается в onCreate. Запись в журнале, отображаемая в onDestroy, отображается только при завершении службы с помощью stopService, уведомление просто исчезает примерно через 10 секунд, и служба все еще работает. – Scott

+0

Следует добавить, что это сработало, как и ожидалось, с setLatestEventInfo, который обесценился, и я пытаюсь переписать его с помощью notification.builder. – Scott

ответ

3

У меня была такая же проблема с текущим уведомлением, пропавшим без вести в ICS на новом телефоне. Приложение и уведомление отлично работали в каждой версии Android, которую я тестировал ранее, и даже работают на эмуляторе ICS. Излишне говорить, что это сводило меня с ума на пару месяцев, но я наконец нашел ответ.

http://code.google.com/p/android/issues/detail?id=21635

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

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