2012-02-11 9 views

risposta

-1

se i destinatari sono registrati su AndroidManifest, allora sì, l'app lo riceverà comunque. D'altra parte, se si sta registrando tramite codice (in servizio/attività), l'app non lo riceverà

+0

Questo non sembra più il caso di 3.1. Vedi la risposta di @ CommonsWare di seguito. –

+0

è una risposta folle .. perché accettare questo .. –

+0

@ZalaJanaksinh non era "sciocco" il tempo in cui è stato risposto - solo se conosci la storia di Android :) – waqaslam

26

Accade forse che ricevo ancora i ricevitori di trasmissione registrati dopo aver forzato l'arresto dell'applicazione?

Su Android 3.1+, n. Una volta che l'utente ha interrotto forzatamente la tua applicazione, non riceverai più trasmissione Intents, di alcun tipo, finché l'utente non avvierà manualmente una delle tue attività.

+0

Sai se ci sono soluzioni alternative a questo? –

+3

@MikeT: l'avvio manuale dell'utente di una delle attività * è * la "soluzione alternativa". – CommonsWare

+0

Ok, buono a sapersi! Ma perché? Per dare all'utente un maggiore controllo sulle app? Inoltre, mi chiedo: queste app taskmanager chiamano anche questo force-stop quando si libera la memoria?O usano metodi meno invasivi per uccidere un processo? – Peterdk

1

Non devi aggiungere FLAG_INCLUDE_STOPPED_PACKAGES all'intenzione del destinatario di avviare la tua attività o il tuo servizio. Devi aggiungerlo all'intento che usi per sendBroadcast. Significato, è necessario aggiungerlo all'intento dell'applicazione che richiama la trasmissione.

Questo è come si dovrebbe attivare il ricevitore da un'altra applicazione:

 Intent intent = new Intent("com.xxx.my_filter_intent"); 
     intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); 
     this.sendBroadcast(intent); 

Se si dispone di alcun controllo su questa trasmissione (ad esempio se si tratta di una trasmissione di sistema) e non v'è alcuna bandiera all'interno - quindi la tua app non verrà attivata da questa trasmissione se è in stato di arresto forzato.

Per saperne di più qui: http://developer.android.com/about/versions/android-3.1.html#launchcontrols

0

usare il mio metodo se si desidera avviare un'applicazione nascosta per appena prima volta che faccio un'attività Launcher trasparente come questo

<activity android:name=".MainActivity" 
android:label="@string/app_name" 
android:theme="@style/Theme.Transparent" 
android:excludeFromRecents="true" 
> 
<intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 

Così faccio l'app nascosta nel programma di avvio inserendo questo codice in oncreat()

PackageManager p = getPackageManager(); 
ComponentName componentName = new ComponentName(this, MainActivity.class); 
p.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); 

Quindi io uso questo codice per l'icona spettacolo app sul lanciatore e farlo girare in grado, classe di servizio che utilizzano la trasmissione di avvio ricevitore e in connessione di rete di classe ricevitore di broadcast troppo (autostart.java e networkConnectinCheck.java):

PackageManager p = context.getPackageManager(); 
ComponentName componentName = new ComponentName(context, MainActivity.class); 
p.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); 

Ora posso eseguire l'app per la prima volta da mani dell'utente e dopo questo utilizzo il mio ricevitore per l'app di pranzo in qualsiasi momento.

Problemi correlati