2012-11-14 9 views
5

Forse sto andando su questo nel modo sbagliato, ma voglio rispondere al mio evento di clic di Android AppWidget all'interno della mia app E avviare un'attività. Nel momento in cui ho impostato il PendingIntent ho un altro Intent che voglio avviare quando si fa clic. Il mio onStartCommand utilizza questa linea:Invio di intenti all'interno di un altro intento

final Intent mLaunchIntent = (Intent) intent.getParcelableExtra(Widget.EXTRA_INTENT); 

Quando chiamo setOnClickPendingIntent ho questa linea prima:

mSendingIntent.putExtra(Widget.EXTRA_INTENT, (Parcelable) mLaunchIntent); 

Così, anche se mLaunchIntent è una valida Intent in entrambe le linee, la prima riga manca un grande affare di dati. Chiamare startActivity quindi non riesce perché il Intent non è valido.

Mi chiedo se è possibile, e come, per inviare un Intent all'interno di un altro Intent senza chiamare rigorosamente putExtras perché questo metodo semplice aggiunge gli extra da un Intent a quella successiva. Mi piacerebbe mantenere questi due separati e facilmente accessibili.

risposta

1

Non è possibile utilizzare un service per analizzare l'intento?

+0

Sto usando un servizio, ma quel servizio viene chiamato con un intento, in questo caso 'mSendingIntent'. Devo passare "mLaunchIntent" accanto a tale Intent in modo che l'evento click avviasse un'attività. – Tom

1

Ci sono diversi modi per passare intenti/oggetti dalla sorgente alla destinazione e viceversa. Un modo per farlo senza usare bundle o extra sarebbe ricorrere ai soliti metodi di classe con variabili (getter e setter). Passa gli oggetti usando i metodi. Un altro modo di farlo sarebbe l'uso di variabili di classe. Es:

public class ClassB extends Activity{ 
    public static Object myObject; 
    ... 
} 

public class ClassA extends Activity{ 
    ... 
    @override 
    protected void onCreate(Bundle savedInstanceState){ 
     Object myObject = ClassB.myObject; 
    } 
} 
+0

Questa è ... una soluzione. Ma questo non funziona nel mio caso a causa di una serie di problemi. Per uno, cosa succede se l'utente ha fatto clic su due widget in sequenza. Non voglio modificare una variabile globale o impostare una sorta di coda globale. Inoltre, il servizio e BroadcastReceiver operano su thread diversi. Le condizioni di gara rendono questa una soluzione molto complicata. – Tom

7

In realtà l'ho capito, la soluzione era abbastanza semplice. mLaunchIntent non deve essere trasmesso a Parcelable o i dati vengono persi.

mSendingIntent.putExtra(Intent.EXTRA_INTENT, mLaunchIntent); 

Questo era tutto quello che avevo bisogno di inviare una Intent attraverso un altro Intent.

+0

funziona davvero? l'hai provato? –

+0

Ci dovrebbe essere 'Intent.EXTRA_INTENT' invece di' Widget.EXTRA_INTENT' – GreenRobo

+0

puoi dirlo, come recuperare l'intento e passare all'oggetto intent – JSONParser

Problemi correlati