2012-12-24 9 views
7

Ho un'attività supporre "Attività A", che mi metto in due modi
a) StartActivity()
b) StartActivityForResult()
ora ho pochi metodi che stanno avendo comportamenti diversi per l'attività modo iniziato. Ora voglio rilevare che "Attività A" è stata avviata per il risultato. Quindi la mia domanda su come possiamo rilevare che l'attività è stata avviata per il risultato? Non voglio inviare dati tramite l'intento. Qualunque altro modo più generalizzato?attività di Rilevamento viene avviato per il risultato

Grazie.

+1

'invia dati attraverso intent' sé è il modo ottimizzato. –

risposta

-1

inviare alcune booleano Extra quando la sua chiamata utilizzando

intent.putExtra("mBool", true); 
startActivityForResult(intent); 

A seconda che il valore, rispettive azioni sono fatte.

if(getIntent().hasExtra("mBool")){ 

//ForResult 
}else{ 

//default 
} 
+1

Imho, pessima soluzione. Perché aggiungere complessità all'applicazione quando si può semplicemente controllare 'this.getCallingActivity()! = Null'? –

+0

Come ho capito, puoi ottenere l'attività di chiamata solo quando è in attesa di un risultato. Nel caso in cui l'attività non stia chiamando per un valore di risultato, non è possibile modificare il comportamento a seconda dell'attività di chiamata. Quindi, nel caso in cui tu avessi più di una attività che chiama un altro, non potresti distinguere il valore di – Goot

+0

Bad anwser poiché non sta utilizzando la soluzione nativa Android –

1

Non hai bisogno di passare i dati falsi in Intent. Attività ha metodo per il controllo di partenza Activity si chiama getCallingPackage()

Dalla documentazione:

ritorno il nome del pacchetto che ha invocato questa attività. Questo è chi i dati in setResult() saranno inviati a. È possibile utilizzare queste informazioni per verificare che il destinatario sia autorizzato a ricevere i dati.

10

Da this answer

Quando la vostra attività è stata iniziata solo da startActivity() un metodo getCallingActivity() nell'attività di destinazione restituirà null. Quando è stato chiamato da startActivityForResult() restituirà il nome dell'attività di chiamata .

Esempio:

if (getCallingActivity() == null) { 
    //This Activity was called by startActivity 
} else { 
    //This Activity was called by startActivityForResult 
} 
+2

Dovrebbe essere la risposta corretta;) –

+0

grazie funziona perfettamente +1 –

+0

non funziona quando Intent.FLAG_ACTIVITY_NEW_TASK è impostato – Hector

Problemi correlati