2011-11-10 15 views
13

Nella mia applicazione, ho bisogno di inviare il messaggio di testo per l'utente dopo un certo intervallo. Per questo ho bisogno di eseguire il messaggio che invia il codice in background. Sto utilizzando il gestore degli allarmi per avviare l'attività in un momento specifico. Cosa devo fare? c'è un altro modo per fare ciò?Come eseguire l'attività in background in Android

risposta

20

Si potrebbe considerare di usare Services che sono fondamentalmente Attività UI-less.

+0

nei servizi di monitoraggio beacon non funziona quindi per favore possiamo eseguire l'attività in background – Prasad

+0

@kaspermoerch, la prego di rispondere se è possibile eseguire attività (non Service) in background per qualsiasi attività che devo fare? Ho disperatamente bisogno di un'attività. Il servizio – rightaway717

+0

è di aiuto se si desidera richiedere i permessi .. ( – Sharpe

1

Per coloro che vogliono farlo con un'attività, e non utilizzando un servizio (ci possono essere situazioni in cui ciò sia necessario), l'ho fatto avviando l'attività come al solito, e poi nel onCreate del Activity ho inviato in background chiamando moveTaskToBack (true).

Vedi Sending a running application to background programmatically

Se si utilizza questo metodo, si dovrebbe aggiungere un info in più per l'intento con cui si avvia l'Activity, in modo che si sappia in onCreate che esso si deve inviare allo sfondo. Lo fai chiamando il metodo putExtra dell'Intento. In onCreate di Activity, ottieni l'intento di chiamata con getIntent, quindi recuperi le informazioni che hai inserito con getStringExtra, ad esempio (ho usato una stringa di informazioni extra). Vedi la documentazione per la classe Intent.

0

Si consiglia di utilizzare Servizio s per raggiungere tale obiettivo, ma ho riscontrato una situazione simile quando ho bisogno di qualcosa da un'altra app e l'intento del servizio non è stato esportato, quindi l'unico modo per avviare il servizio è avviare l'attività - e per mantenere l'utente nella mia app ho bisogno di mantenere la mia attività in primo piano. In tal caso, è possibile avviare l'altra attività in un AsyncTask, e poi in onPostExecute riavvio me stesso.

(new AsyncTask<Void, Void, Void>() { 
     boolean starting = false; 
     @Override 
     protected Void doInBackground(Void... params) { 
      if(!externalServiceRunning()){ 
       Intent externalIntent = getPackageManager().getLaunchIntentForPackage("com.external..."); 
       if (externalIntent != null) { 
        starting = true; 
        startActivity(externalIntent); 
       } 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void aVoid) { 
      if(starting) { 
       Intent myApp = getPackageManager().getLaunchIntentForPackage("com.my.myapp"); 
       if (myApp != null) { 
        startActivity(myApp); 
       } 
      } 
     } 
    }).execute(); 
Problemi correlati