2012-01-27 19 views
26

Questo codice eseguirà un'applicazione automaticamente dopo l'avvio del sistema, ma l'applicazione si chiuderà dopo aver premuto il pulsante Indietro.Come eseguire un'app Android in background?

Se l'app viene eseguita normalmente facendo clic sull'icona corrispondente. Funzionerà continuamente anche dopo aver premuto il pulsante Indietro o eseguito altre app.

public class AutoBoot extends BroadcastReceiver { 
    @Override   
    public void onReceive(Context context, Intent intent) {     
     Intent i = new Intent(context, MyActivity.class); 
     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i);   
    } 
} 

La mia domanda è, come fare in modo che questo codice di esecuzione automatica continui a funzionare anche dopo aver premuto il pulsante Indietro o eseguito altre app?

risposta

16

È possibile avviare uno Service qui se si desidera che l'applicazione venga eseguita in background. Questo è il motivo per cui viene utilizzato il servizio in Android: esecuzione in background e operazioni di lunga durata.

UDPATE

È possibile utilizzare START_STICKY per rendere il vostro servizio in esecuzione in modo continuo.

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    handleCommand(intent); 
    // We want this service to continue running until it is explicitly 
    // stopped, so return sticky. 
    return START_STICKY; 
} 
+0

Come sarà explicetely fermato –

+0

Inoltre, come faccio a iniziare il servizio dopo un riavvio? –

3

come applicazioni eseguito in background in ogni caso. Suppongo che quello che stai chiedendo è come fai a fare le app in background. La soluzione seguente renderà la tua app in background dopo l'apertura dell'app e dopo il riavvio del sistema.

Qui di seguito, ho aggiunto un link ad un esempio completamente funzionante (nella forma di un Project Studio Android)

Questo argomento sembra essere fuori dalla portata dei documenti Android, e non ci fa sembra essere un documento completo su questo. Le informazioni sono distribuite su alcuni documenti.

I seguenti documenti vi dicono indirettamente come fare questo: https://developer.android.com/reference/android/app/Service.html

https://developer.android.com/reference/android/content/BroadcastReceiver.html

https://developer.android.com/guide/components/bound-services.html

Nell'interesse di ottenere i vostri requisiti di utilizzo corretto, la parte importante di questo sopra doc a leggere attentamente è: #Binder, #Messenger e il collegamento dei componenti di seguito:

https://developer.android.com/guide/components/aidl.html

ecco il link ad un esempio completamente funzionante (in formato Android Studio): http://developersfound.com/BackgroundServiceDemo.zip

Questo progetto inizierà un'attività che si lega ad un servizio; implementare l'AIDL.

Questo progetto è anche utile per ridimensionare ai fini dell'IPC in diverse app.

Questo progetto è sviluppato anche per l'avvio automatico quando si riavvia Android (previste l'applicazione è gestito almeno una dopo l'installazione e applicazione non è installato su scheda SD)

Quando questa applicazione/progetto viene eseguito dopo il riavvio, è utilizza dinamicamente una vista trasparente per far sembrare che nessuna app sia iniziata ma il servizio dell'app associata inizia in modo pulito.

Questo codice è stato scritto in modo tale da semplificare notevolmente la simulazione di un servizio programmato.

Questo progetto è sviluppato in conformità ai documenti di cui sopra ed è successivamente una soluzione pulita.

C'è tuttavia una parte di questo progetto che non è pulita: non ho trovato un modo per avviare un servizio al riavvio senza utilizzare un'attività. Se qualcuno di voi leggendo questo post ha un modo pulito per farlo, per favore pubblica un commento.

+0

grazie - Sono molto interessato a imparare questo. Ho sviluppato App Android in Android Studio per quasi 1 anno. Ho scaricato il tuo file zip, l'ho inserito in una directory, ho aperto quel director in Android Studio e su build ho ricevuto questo errore. Errore: si è verificato un problema durante la configurazione del progetto ': app'. > Impossibile risolvere tutte le dipendenze per la configurazione ': app: _debugApkCopy'. > Impossibile trovare com.android.support.constraint: constraint-layout: 1.0.2. richieste dal: progetto: app –

+0

Sto cercando di indovinare che uno dei vostri layout sta usando il layout vincolo quando la dipendenza layout di vincolo non è nel file Gradle. In caso contrario, modificare il layout dei vincoli nel file di layout in un layout di ordinay e, se sono presenti proprietà nel layout relative al layout dei vincoli, rimuoverli anche. – user2288580

+0

Quando escono nuove versioni di gradle, normalmente ci sono problemi di migrazione. Il modo migliore per affrontare questo problema è creare un nuovo progetto con lo stesso nome di pacchetto e migrare i file di progetto separatamente. Mi dispiace per l'inconveniente. L'app è stata accuratamente testata quindi funziona. – user2288580

Problemi correlati