2011-12-13 34 views
24

Tengo una aplicación que pretende ejecutar solo como un servicio (sin interfaz, simplemente ejecutar en segundo plano). No mencioné ninguna actividad en mi AndroidManifest.xml pero puse un receptor para iniciar la aplicación al inicio del teléfono.Iniciar la aplicación de Android sin actividad

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <service 
     android:enabled="true" 
     android:name=".MyAppService"> 
     <intent-filter> 
      <action 
       android:name = "me.myapp.MyAppService"> 
      </action> 
     </intent-filter> 
    </service> 
    <receiver 
     android:enabled="true" 
     android:name=".BootReceiver"> 
     <intent-filter> 
      <action android:name = "android.intent.action.BOOT_COMPLETED"/> 
     </intent-filter> 
    </receiver> 
</application> 

El problema es que a medida que estoy desarrollando (usando Eclipse) la aplicación, lo que necesito para poner a prueba mis cambios a menudo. Cuando ejecuto la aplicación (con mi teléfono conectado en modo de depuración), Tengo un mensaje como

[2011-12-14 00:18:40 - MyApp] Android Launch! 
[2011-12-14 00:18:40 - MyApp] adb is running normally. 
[2011-12-14 00:18:40 - MyApp] No Launcher activity found! 
[2011-12-14 00:18:40 - MyApp] The launch will only sync the application package on the device! 
[2011-12-14 00:18:40 - MyApp] Performing sync 

¿Cómo puedo iniciar la aplicación durante la ejecución, sin tener que reiniciar cada vez?


Editar esto ya no es posible para Android 3.1 o superior. Source

Respuesta

33

Además de las dos opciones mencionadas por EboMike: Siempre puede enviar la transmisión BOOT_COMPLETED a través de la línea de comando en lugar de reiniciar su teléfono.

Uso

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED 

Esto dará lugar a una situación como después de un reinicio real, y también dará lugar a ninguna App partido receptores 3ª arranque. Después de tipearlo una vez en un terminal, generalmente puede repetirlo simplemente presionando la tecla de flecha hacia arriba seguida de retorno en la mayoría de los sistemas operativos. O puede incluirlo en un script que se activa después de reinstalar su aplicación.


Si desea limitar la emisión a sólo a su aplicación, también puede especificar un componente:

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n your.app.packagename/.YourReceiverClassName 

Esto envía la señal por un reinicio a su receptor. El resto de las aplicaciones no son llamadas.

+0

Gracias, buen camino a seguir. Tal vez también pueda crear mi propio evento que solo mi aplicación puede capturar para evitar conflictos con otras aplicaciones de terceros. –

+1

@MartinTrigaux Acabo de consultar los documentos y recordé que es posible especificar un componente para lograrlo. Ver mi edición –

2

Opción 1: Agregue una actividad ficticia que iniciará su servicio. Eliminarlo antes del envío.

Opción 2: cree una segunda aplicación de prueba que inicie su servicio.

+0

Fácil y de trabajo, gracias –

+0

¿Cómo se comportará la aplicación en tiempo de ejecución? ¿Qué hará que la aplicación se ejecute? Ejecutar después del arranque no es lo suficientemente bueno, ya que Android puede matar el proceso. ¿Qué lo iniciará de nuevo? –

1

de iniciar el servicio usando Receptor de radio a través de cualquier Intención como

android.intent.action.BOOT_COMPLETED

no es posible por encima de Android 3.1 hasta que el usuario utiliza su aplicación, y por lo tanto utilizar su aplicación debe haber una sola actividad no UI (que puede llamar finish en oncreate()).

See the proof here

Cuestiones relacionadas