8

suppongo di avere dei fraintendimenti con le Intent Flag. Quello che sto cercando di fare è che sto avendo una radio applicazioni di streaming, che ha due attività (PlayerApplication e SettingsScreen). Ho un Service.class per lo streaming che viene eseguito in background, che contiene anche una notifica (è possibile interrompere/avviare la riproduzione nel menu di sovrascrittura delle notifiche e PlayerApplication). Se l'utente fa clic sulla notifica, PlayerApplicationActivity dovrebbe essere riportato sullo schermo.Android: PendingIntent da Notification non attiva il onCreate() se riporta Activity sullo schermo

Tutto funziona bene, si aspettano il caso: si apre utente SettingsScreenActivity -> Apre NotificationOverlayMenu -> clic al di notifica -> PendingIntent riprende a PlayerApplicationActivity

Ora, PlayerApplicationScreen è lì, ma non posso fare clic su nulla. Vedo che l'onCreate() della mia PlayerApplication non viene attivato, se riprendo dalla notifica. Ma il layout sembra bene (gonfiato anche nel onCreate())

ho usato seguendo PendingIntent nella Service.class:

PendingIntent contentIntent = PendingIntent.getActivity(
     this.getApplicationContext(), //Service.class 
     0, 
     new Intent(this,PlayerApplicationActivity.class) 
      .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
       | Intent.FLAG_ACTIVITY_SINGLE_TOP), 
     0); 

Quindi in realtà il PendingIntent dovrebbe portare l'attività (se già in esecuzione) di nuovo a la cima. Sto usando Intenti sbagliati o mi manca un punto?

EDIT: e ho dichiarato launchMode in manifest.XML

android:launchMode="singleTask" 
+1

Dal momento che avete dichiarato 'Android: launchMode = "singleTask"' 'per la vostra Activity' e è già in esecuzione riceverai la callback 'onNewIntent' invece di' onCreate' –

risposta

1

ho capito quello che stavo facendo male:

  1. Per il mio scopo ho usato il launchMode sbagliata. Proprio uno è singleTop non singleTask

  2. ho dichiarato l'launchMode nel <application-node> al posto del <activity-node>

    //Manifest.xml 
    <activity 
        android:name="..." 
        android:launchMode="singleTop" > 
    
6

Secondo sviluppatore Android site, In FLAG_ACTIVITY_CLEAR_TOP, FLAG_ACTIVITY_SINGLE_TOP e in modalità di lancio: SingleTask, Se l'istanza di attività che si sta chiamando è già in esecuzione quindi, anziché creare una nuova istanza, chiama il metodo onNewIntent(). Quindi penso che dovresti controllare questa condizione che la tua attività sia in esecuzione quando onCreate() non sta chiamando.

+0

OMG! Tutte le mie ricerche portano finalmente a qualcosa !! Grazie! Ascoltami ... basta scavalcare su NewIntent() e fai quello che hai fatto sul metodo onCreate !!!!!!! –

+0

Long Live Man hai salvato la mia giornata grazie mille per aver postato questo. –