2012-06-06 24 views
57

Ho uno scenario nella mia applicazione. Non c'è alcuna interfaccia utente nella mia applicazione, ma c'è un servizio che si avvia all'avvio e verrà eseguito continuamente.Avviare l'applicazione Android senza attività principale e avviare il servizio all'avvio dell'applicazione

Come posso configurare il file manifest senza un'attività principale? Posso avviare la mia app senza attività? E al momento di avviare la mia app, dovrebbe iniziare il mio servizio. È possibile in qualche modo? Non voglio fare attività traslucide per avviare il servizio.

Grazie in anticipo !!!

+0

uno sguardo a questo [domanda] [1] [1]: http://stackoverflow.com/questions/4468006/can-i-start-a-service-without-activity -o-ricevitore –

risposta

92

hai detto che non volevi usare una traslucida di attività, ma che sembra essere il modo migliore per farlo:

  1. Nel vostro manifesto, impostare il tema di attività per Theme.Translucent.NoTitleBar.
  2. Non preoccuparti di un layout per la tua attività e non chiamare setContentView().
  3. In Attività onCreate(), avviare il servizio con startService().
  4. Uscire dall'attività con finish() dopo aver avviato il servizio.

In altre parole, la tua attività non deve essere visibile; può semplicemente assicurarsi che il servizio sia in esecuzione e quindi uscire, il che suona come quello che vuoi.

Si consiglia vivamente di mostrare almeno un Toast notification che indica all'utente che si sta avviando il servizio o che è già in esecuzione. È un'esperienza utente molto negativa avere un'icona di avvio che sembra non fare nulla quando viene premuta.

+1

mi dà lo schermo vuoto dopo aver lanciato la mia applicazione.che non è il caso ... – Meher

+1

@meher l'ho appena testato e ha funzionato perfettamente per me - il mio servizio è iniziato e non ho visto alcuna attività , anche per un istante. Pubblica il contenuto del tuo Activity onCreate() e dovremmo essere in grado di capire cosa c'è che non va. –

+0

quando ho installato la mia applicazione per la prima volta posso vedere l'attività avviata e scomparsa in un secondo. – Meher

23

Sì, è possibile farlo creando semplicemente un BroadcastReceiver che chiama il tuo Service all'avvio dell'applicazione. Ecco una risposta completa data da me.
Android - Start service on boot

Se non si desidera qualsiasi icona/launcher per voi applicazione è possibile farlo anche, solo che non crea alcuna attività con

<intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 

Basta dichiarare il vostro Service come dichiarato normalmente.

+2

Sembra che l'asker stia bene iniziando il 'Service' all'avvio, ma vuole sapere come non avere l'attività principale, ma semplicemente assicurarsi che il' Servizio' sia in esecuzione quando si preme l'icona del launcher. –

+0

Aggiunto anche questo. –

+2

Ma sembra che vogliano un'icona di avvio che, se premuto, assicura che il servizio sia in esecuzione. Il tuo suggerimento si limita a eliminare l'icona del launcher. –

1

Android Studio Version 2.3

È possibile creare un servizio senza attività principale seguendo alcuni semplici passaggi. Potrai installare questa app tramite Android Studio e eseguirne il debug come un'app normale.

Innanzitutto, creare un progetto in Android Studio senza un'attività. Quindi creare la classe di servizio e aggiungere il servizio al tuo AndroidManifest.xml

<application android:allowBackup="true" 
    android:label="@string/app_name" 
    android:icon="@mipmap/ic_launcher" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <service android:name="com.whatever.myservice.MyService"> 
     <intent-filter> 
      <action android:name="com.whatever.myservice.MyService" /> 
     </intent-filter> 
    </service> 
</application> 

Ora, nel menu a discesa accanto al pulsante "Esegui" (freccia verde), andare a " modifica configurazioni "e all'interno di" Opzioni di avvio "scegliere" Niente ". Ciò ti consentirà di installare il tuo servizio senza Android Studio lamentandosi di non avere un'attività principale.

Una volta installato, il servizio NON sarà in esecuzione, ma si sarà in grado di iniziare con questo comando adb shell ...

am startservice -n com.whatever.myservice/.MyService 

può controllare è in esecuzione con ...

ps | grep whatever 

Non ho ancora provato ma è probabile che Android Studio avvii automaticamente anche il servizio. Questo dovrebbe essere fatto nel menu "Modifica configurazioni".

Problemi correlati