2012-11-30 12 views
6

Ho avuto un problema con NotificationManager nella mia app negli ultimi due giorni e non sembra che mi stia avvicinando a risolverlo.NotificationManager non riesce a visualizzare la notifica con "notifica: id corrotto: inviato 1, ripristinato 0" avviso

Ho un servizio molto semplice che non fa nulla al momento. E 'solo suppone che la notifica di visualizzazione:

public class UpdateService extends Service { 
private static final String TAG = "UpdateService"; 
private static int NOTIFICATION_ID = 1; 
private UpdateServiceBinder binder = new UpdateServiceBinder(); 

@Override 
public void onCreate() { 
     Log.i(TAG, "Service created"); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.i(TAG, "Service started"); 

    sendNotification(100); 

    return Service.START_NOT_STICKY; 
} 

private void sendNotification(int updatedItems) { 
    NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext()) 
      .setSmallIcon(R.drawable.icon) 
      .setContentTitle("Sync") 
      .setContentText("Updated " + updatedItems); 

    Intent resultIntent = new Intent(getBaseContext(), MainActivity.class); 

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(getApplicationContext()); 
    stackBuilder.addParentStack(MainActivity.class); 
    stackBuilder.addNextIntent(resultIntent); 

    PendingIntent resultPendindIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 

    builder.setContentIntent(resultPendindIntent); 

    NotificationManager manager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); 
    manager.notify(NOTIFICATION_ID, builder.build()); 
} 

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

@Override 
public boolean onUnbind(Intent intent) { 
    return true; 
} 

public class UpdateServiceBinder extends Binder { 
    public UpdateService getService() { 
     return UpdateService.this; 
    } 
} 

}

Purtroppo, quando il servizio viene avviato e la notifica dovrebbe essere visualizzato non succede nulla. Il servizio è sicuramente avviato in base ai messaggi di registro. Allo stesso tempo, non v'è di avviso da NotificationManager:

11-30 23: 24: 34,620: I/UpdateService (28356): Servizio creato

11-30 23: 24: 34,800: I/UpdateService (28356): Il servizio è iniziato

11-30 23: 24: 34,808: W/NotificationManager (28356): comunicare: id danneggiati: inviato 1, tornato 0

ho provato ad utilizzare numeri diversi rispetto 1 ma non ha aiutato. Non sono sicuro di cosa trarne. Il codice che sto utilizzando proviene dalla documentazione di Android sul servizio in here e le notifiche in here. Quando isola il codice in un'app pulita separata che è configurata in modo simile a quello su cui sto lavorando, la notifica viene visualizzata correttamente. Qualcuno ha avuto questo problema prima o ha qualche idea?

Qualsiasi aiuto apprezzato. Grazie!

risposta

1

Ho trovato una soluzione a questo problema. Ho dovuto cambiare il nome del pacchetto da com.gttn.sample a com.gttn.sample2. Non sono proprio sicuro del motivo per cui ho dovuto farlo, ma le notifiche sono state visualizzate correttamente e l'avviso è scomparso.

+0

ho fatto lo stesso e ha funzionato .. non so perché –

+0

ho fatto lo stesso e ha funzionato :) –

-1

Non sono sicuro del motivo per cui si utilizza getBaseContext(), ma suggerisco di utilizzare invece getApplicationContext(). Inoltre, non sono sicuro del motivo per cui sei vincolato al Servizio.

+0

Hai ragione Dovrei usare getApplicationContext(). In effetti la prima versione del codice l'ha usata. Ho dimenticato di ripristinare le mie modifiche al codice. Non funziona con getApplicationContext() lanciando esattamente lo stesso avviso e la notifica non viene mostrata. Inoltre, al momento non sono vincolante da nessuna parte al servizio perché volevo prima sperimentare con le notifiche. In futuro legherò al servizio per comunicare con esso. Grazie per la risposta. – gttn

-1

ho esaminato personalmente questo problema. senza righe aggiuntive dal file di log (dovrebbe essere compreso tra 5 righe dopo) potrebbe esserci un messaggio simile a "E/NotificationService (287): soppressione della notifica dal pacchetto in base alla richiesta dell'utente". Questa è una nuova impostazione in ICS (forse JB) per disabilitare le notifiche per ogni app. Vai su Impostazioni -> App -> e fai clic sulla casella "Mostra notifiche" nella parte superiore. per ovvi motivi, la modifica del nome del pacchetto aggirerebbe questa impostazione in modo molto efficace.

10

Ho avuto questo problema, quindi mi ricordo che ho disattivato la "Mostra notifica" dal mio "Informazioni app". L'ho abilitato e le notifiche sono tornate di nuovo.

  1. Passare a Impostazioni> App (Application Manager).
  2. Toccare l'app che si desidera interrompere.
  3. Toccare per deselezionare la casella per Mostra notifiche.

FYI potrebbe differire da un dispositivo Android all'altro, tuttavia sono tutti più o meno gli stessi.

+0

Ho appena passato ore cercando di risolvere questo problema e qualcuno su SO ha suggerito di visualizzare il logcat anche se nessun errore nel mio codice venivano generati. Risulta che "Mostra notifica" è il problema. Ciò che mi ha davvero infastidito è che, anche dopo aver disinstallato l'app e reinstallato, "Mostra notifica" era ancora disabilitato. WTF Google? – AndroidDev

1

Quando si installa e reinstallare l'applicazione più volte qualcosa

incontrollato "Mostra Notifiche" in Impostazioni> ApplicationManager> "Il tuo app".

Basta controllare di nuovo "Mostra notifiche" e sii felice!

0

Android sembra avere un limite di velocità in atto per bloccare le app da DDOS all'ombra di notifica. Stavo vedendo questi registri dalla mia parte perché stavo cercando di aggiornare una notifica di avanzamento all'interno di un ciclo:

Observable.range(0, 100) 
    .subscribe(progress -> updateProgressNotification(progress)); 

Aggiunta di un ritardo arbitraria tra ogni emissione risolve il problema per me:

Observable.range(0, 100) 
    .zipWith(Observable.interval(25, TimeUnit.MILLISECONDS), (progress, delay) -> progress) 
    .subscribe(progress -> updateProgressNotification(progress)); 
Problemi correlati