2009-10-04 18 views
14

Ho creato un ricevitore di trasmissione nell'attività principale e il servizio in background che invia intenti di trasmissione. L'applicazione si blocca ogni volta che provo a farlo funzionare e il registro viene visualizzato il seguente messaggio di errore:Errore durante la ricezione di problemi di trasmissione Problema

10-04 13: 30: 43,218: ERRORE/AndroidRuntime (695): java.lang.RuntimeException: Errore ricevere intenti trasmessa { action = com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE (ha comparse)} in [email protected]

Il messaggio broadcast viene inviato da CommunicationService class nel seguente metodo:

private void announceLoginStatus(){ 
    Intent intent = new Intent(LOGIN_STATUS_UPDATE); 
    intent.putExtra(SERVER_MESSAGE, mServerResponseMessage); 
    intent.putExtra(SESSION_STRING, mSessionString); 
    sendBroadcast(intent); 
} 

dove

String LOGIN_STATUS_UPDATE = "com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE" 

nell'attività principale il seguente reveiver trasmissione è definita:

public class LoginStatusReceiver extends BroadcastReceiver { 

     public void onReceive(Context context, Intent intent) { 
      String serverMessage = intent.getStringExtra(CommunicationService.SERVER_MESSAGE); 
      String sessionString = intent.getStringExtra(CommunicationService.SESSION_STRING); 

      userInfo.setSessionString(sessionString); 
      saveSettings(); 
     } 
    } 

e registrato nel metodo onResume:

 IntentFilter loginStatusFilter; 
     loginStatusFilter = new IntentFilter(CommunicationService.LOGIN_STATUS_UPDATE); 
     loginStatusReceiver = new LoginStatusReceiver(); 
     registerReceiver(loginStatusReceiver, loginStatusFilter); 

E il file manifesto io è comprensivo di quanto segue:

<activity android:name=".GaitLink" 
       android:label="@string/app_name"> 
     <intent-filter> 
      ... 
      <action android:name="com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE" /> 
     </intent-filter> 
    </activity> 

sarei davvero grato se qualcuno potrebbe spiegare il motivo per cui il registro visualizza il messaggio di cui sopra e l'applicazione si blocca.

Grazie!

risposta

5

Sei andato passo dopo passo nel debugger per trovare esattamente dove si verifica l'arresto anomalo?

Una cosa da tenere a mente è se si ignorano gli eventi del ciclo di vita di Android che si sta chiamando correttamente il costruttore della classe base quando necessario.

+58

Forse potresti dirci qual era il problema? – Buffalo

4

Hai due filtri Intent; ne hai solo bisogno. Se si registra BroadcastReceiver tramite registerReceiver(), utilizzare solo lo IntentFilter che è il secondo parametro per quella chiamata API - non inserire anche un elemento <intent-filter> nello <activity> nel manifest.

Non so per certo se questo è il tuo problema, ma certamente non aiuta.

7

Ho risolto il problema aggiungendo intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); quando si avvia una nuova attività.

Se non avviato da un'attività, è necessario intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK".

+0

funziona per me! –

0

penso che sia necessario utilizzare il metodo del ciclo di vita onPause() e onResume() Metodo per annullare la registrazione e registrare l'intento di trasmissione.

0

Non sono sicuro che tu possa capire cosa voglio dire, a causa del mio inglese.

Penso questa riga di codice è causa di un problema:

userInfo.setSessionString(sessionString); 

Il mio progetto era sbagliato perché voglio:

int i = Integer.parseint(intent.getExtars("9")); 

e si registra due volte.

0

Ho scoperto che assicurandomi che l'intento fosse stato eseguito dall'attività originale e mettendo le cose in una classe, ho eliminato l'intera questione.

-1

Ok che cosa ha funzionato per me stava dichiarando il metodo onNotification come segue:

window.onNotification = function(event) { 
    alert('onNotification called!'); 
}; 
0

Questa è una domanda molto vecchio, ma penso che molte persone sarebbero ancora essere alla ricerca delle risposte per esso. La mia situazione è abbastanza simile a questa.

Quello che volevo fare è chiamare finish() nell'attività figlio quando determinati eventi si verificano nell'attività padre, cioè inviando il messaggio broadcast da MainActivity all'attività figlio.

seguito è il codice in MainActivity quando si è verificato l'evento (ad esempio quando la connessione di rete è interrotta etc etc):

Intent intent = new Intent("ACTIVITY_FINISH"); 
    intent.putExtra("FinishMsg","ACTIVITY_FINISH: Network broken."); 
    sendBroadcast(intent); 

Nel onResume la propria attività bambino() funzione:

IntentFilter quitFilter = new IntentFilter(); 
    quitFilter.addAction("ACTIVITY_FINISH"); 
    registerReceiver(m_quitReceiver, quitFilter); 

In OnPause) la funzione del bambino di attività (:

unregisterReceiver(m_quitReceiver); 

Entro i cl attività bambino ass:

BroadcastReceiver m_quitReceiver = new BroadcastReceiver() 
{ 
    public void onReceive(Context context, final Intent intent) 
    { 
     if (intent.getAction().equalsIgnoreCase("ACTIVITY_FINISH")) 
     { 
      Log.d("INFO", intent.getExtras().getString("FinishMsg")); 
      finish(); // do here whatever you want 
     } 
    } 
}; 

Spero che questo aiuti.

Problemi correlati