6

Ho un'applicazione senza attività di avvio che funziona correttamente da Android 1.5 ad Android 2.3.4. È avviato dal mio ricevitore di trasmissione. Tuttavia, su Honeycomb (Motorola Xoom), il mio ricevitore broadcast non funziona affatto (non cattura alcun intento). Se posso aggiungere l'attività di avvio per il mio manifesto:L'applicazione Android - [Xoom/Honeycomb] senza attività LAUNCHER non funziona

<activity android:label="@string/app_name" android:name="com.myapp.MainActivity"> 
<intent-filter> 
<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> 
</activity> 

Poi la mia applicazione funziona correttamente (ricevitore di broadcast cattura tutti gli effetti necessari e avvia i miei servizi).

Sarei molto grato per l'aiuto!

+0

Dove è definito il destinatario della trasmissione? –

+0

@Jon Willis: il destinatario è definito in manifest. CommonsWare e Gaurav hanno spiegato il problema. Grazie per l'aiuto! – Kacper86

risposta

10

Stai utilizzando Honeycomb 3.1 o versione successiva? Se sì dai un'occhiata a here. Quando l'applicazione è installata, è in stato di arresto. Quando l'applicazione viene avviata per la prima volta, viene spostata dallo stato di arresto.

Un'applicazione in stato di arresto non verrà avviata da tutti gli intenti di trasmissione. Il mittente dell'intenzione di trasmissione deve specificare il flag Intent.FLAG_INCLUDE_STOPPED_PACKAGES se desidera avviare anche le applicazioni arrestate.

Intent intent = new Intent(MY_INTENT_ACTION); 
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); 
sendBroadcast(intent); 

Se non è possibile modificare il codice che invia l'intento, la soluzione migliore è mantenere l'attività di avvio. Ogni volta che l'utente avvia l'applicazione dopo l'installazione, verrà spostata dallo stato di arresto e inizierà a ricevere le trasmissioni.

Si noti che l'utente può riportare l'applicazione allo stato di arresto da Gestisci applicazioni nelle impostazioni del dispositivo.

+0

Grazie mille per la tua rapida risposta! – Kacper86

4

Su Android 3.1 e versioni successive, BroadcastReceivers non verrà richiamato finché l'utente non ha avviato l'applicazione almeno una volta con altri mezzi, come l'avvio di un'attività.

Poiché gli utenti tendono a diventare molto confusi dalle applicazioni che non hanno un'attività, in realtà si dovrebbe aver avuto un'attività in primo luogo, per la guida in linea, se non altro. Con Android 3.1, è ancora più importante.

+0

Grazie mille per la tua rapida risposta! – Kacper86