2011-11-10 18 views
13

En mi aplicación, debo enviar el mensaje de texto al usuario después de un cierto intervalo. Para eso necesito ejecutar el código de envío de mensaje en segundo plano. Estoy usando el administrador de alarmas para comenzar la actividad en un momento específico. ¿Qué hacer? Hay otra manera de hacer esto?Cómo ejecutar actividad en segundo plano en Android

Respuesta

20

Puede buscar usando Services que son actividades básicas sin UI.

+0

en los servicios de monitorización de baliza no está funcionando así que por favor podemos ejecutar la actividad en segundo plano – Prasad

+0

@kaspermoerch, ¿podría contestar si es posible ejecutar Actividad (no de servicio) en el fondo de cualquier tarea que tiene que hacer? Necesito desesperadamente, desesperadamente, una actividad. El servicio – rightaway717

+0

es útil si desea solicitar permisos. ( – Sharpe

1

Para aquellos que quieren hacerlo con una actividad, y no mediante el uso de un servicio (puede haber situaciones cuando esto es necesario), lo hice iniciando la actividad de la manera habitual, y luego en la actividad onCreate envié a fondo llamando a moveTaskToBack (verdadero).

Ver Sending a running application to background programmatically

Si se utiliza este método, se debe añadir una información adicional a la intención por la que se inicia la actividad, por lo que se sabe en onCreate que debe enviarse a sí mismo a un segundo plano. Para hacerlo, llame al método putExtra del Intento. En Activity onCreate, obtienes el Intento de llamada con getIntent, luego recuperas la información que pusiste allí con getStringExtra, por ejemplo (utilicé una información extra de cadena). Ver la documentación para la clase de Intento.

0

Se recomienda utilizar Servicio s para lograr ese objetivo, pero me he encontrado con una situación similar cuando necesitaba algo de otra aplicación, y la intención del servicio no se exportó, por lo que la única forma de comenzar el servicio es comenzar la actividad, y para mantener al usuario en mi aplicación, necesito mantener mi actividad en primer plano. En ese caso, es posible iniciar la otra actividad en un AsyncTask, y luego en onPostExecute reiniciar yo mismo.

(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(); 
Cuestiones relacionadas