Cómo iniciar la aplicación de Android solo para el servicio

Estoy creando una aplicación cuyo único componente es un service que se ejecuta en segundo plano (básicamente un servidor proxy) pero no puedo encontrar la manera de comenzar ese servicio. La aplicación no puede tener ninguna UI o interacción del usuario, así que no estoy usando Activity.
Broadcast receiver puede escuchar la transmisión BOOT pero ¿cómo comienzo el servicio por primera vez cuando está instalado y cómo puedo mantenerlo en funcionamiento? o hay una transmisión que puedo escuchar después de instalar la aplicación, por ejemplo, puede ser TIME_TICK, pero eso tiene que registrarse desde la actividad, creo.

Lamentablemente, en este momento no hay una forma confiable de recibir un evento de transmisión después de que se haya instalado su aplicación, el bash ACTION_PACKAGE_ADDED no se transmite al paquete recién instalado.

Deberá tener una clase de receptor de difusión así como su servicio para recibir el evento ACTION_BOOT_COMPLETED . También recomendaría agregar el ACTION_USER_PRESENT bash de ser capturado por ese receptor de difusión, esto requiere Android 1.5 (minSDK = 3), esto llamará a su receptor de difusión cada vez que el usuario desbloquea su teléfono. Lo último que puede hacer para tratar de mantener su servicio en funcionamiento sin que se cierre fácilmente automáticamente es llamar a Service.setForeground () en su servicio onCreate para decirle a Android que su servicio no debe detenerse, esto fue agregado principalmente para servicios de tipo de reproductor de mp3 que tienen que seguir funcionando pero que pueden ser utilizados por cualquier servicio.

Asegúrese de agregar los permisos adecuados para los eventos boot_complete y user_present en su manifiesto.

Aquí hay una clase simple que puede usar como receptor de difusión para los eventos.

 package com.snctln.util.WeatherStatus; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class WeatherStatusServiceReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction() != null) { if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED) || intent.getAction().equals(Intent.ACTION_USER_PRESENT)) { context.startService(new Intent(context, WeatherStatusService.class)); } } } }; 

Buena suerte.

Devuelve START_STICKY en Service.onStartCommand

Android reiniciará su servicio

Estoy investigando sobre el mismo problema. Esto es lo que he encontrado: http://kfb-android.blogspot.de/2009/04/registering-for-timetick-after-reboot.html

Esa pequeña demostración simple muestra una solución jugando un poco de ping-pong entre un BroadcatReceiver y un Service . El Receptor está registrado para comenzar en el momento del arranque registrándose en el Manifiesto para recibir ACTION_BOOT_COMPLETED . Simplemente inicia un servicio al recibir ACTION_BOOT_COMPLETED . El Service a su vez registra el BroadcastReceiver luego para el ACTION_TIME_TICK .

La lógica de la aplicación se implementará en BroadcastReceiver .