Sto creando un'applicazione il cui unico componente è uno service
che continua a essere eseguito in background (fondamentalmente un server proxy) ma non sono in grado di trovare un modo per avviare quel servizio. L'applicazione non può avere un'interfaccia utente o l'interazione dell'utente, quindi non sto utilizzando Activity.
Broadcast receiver
è in grado di ascoltare la trasmissione BOOT, ma come si avvia la prima volta il servizio quando è installato e come posso mantenerlo in esecuzione? o c'è una trasmissione che posso ascoltare dopo l'installazione di app, ad es. potrebbe essere TIME_TICK ma deve essere registrato dall'attività che penso.Come avviare l'app Android solo per il servizio
risposta
Purtroppo al momento non esiste un modo affidabile per ricevere un evento di trasmissione dopo aver installato l'applicazione, l'intento ACTION_PACKAGE_ADDED non viene trasmesso al pacchetto appena installato.
Per ricevere l'evento ACTION_BOOT_COMPLETED, è necessario disporre di una classe ricevente broadcast e del servizio. Vorrei anche raccomandare di aggiungere l'intento dello ACTION_USER_PRESENT al ricevitore broadcast, che richiede Android 1.5 (minSDK = 3), che chiamerà il ricevitore broadcast ogni volta che l'utente sblocca il telefono. L'ultima cosa che puoi fare per provare a mantenere il tuo servizio in esecuzione senza che sia facilmente spento automaticamente è chiamare il servizio 01Cnel servizio onCreate per dire a Android che il tuo servizio non dovrebbe essere fermato, questo è stato aggiunto principalmente per il lettore mp3 servizi che devono continuare a funzionare ma possono essere utilizzati da qualsiasi servizio.
Assicurarsi di aggiungere le autorizzazioni appropriate per gli eventi boot_complete e user_present nel manifest.
Ecco una classe semplice che è possibile utilizzare come ricevitore di trasmissione per gli eventi.
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));
}
}
}
};
Buona fortuna.
Buon consiglio. Una cosa su Service.setForeground(): non funziona più su Android 2.0+. Ora tutti i servizi "longevi" devono avere una notifica persistente nell'area di notifica mentre sono in esecuzione. Esempio qui: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ForegroundService.html –
ACTION_USER_PRESENT è un suggerimento fantastico. Ho lottato per mantenere il mio servizio vivo per anni, e questo ha appena risolto. – defrex
Bene, questo non sembra funzionare su Android 4.0.x più ... – ubuntudroid
ritorno START_STICKY
in Service.onStartCommand
Android sarà riavviare il servizio
START_STICKY è valido solo per Android 2.0+ – cow
ma il servizio deve essere eseguito almeno una volta per ottenere la continuità corretta? –
Sono alla ricerca sullo stesso argomento. Ecco è quello che ho trovato: http://kfb-android.blogspot.de/2009/04/registering-for-timetick-after-reboot.html
Questo piccolo e semplice demo mostra una soluzione per la riproduzione di un po 'di ping-pong tra un BroadcatReceiver
e Service
. Il ricevitore è registrato per iniziare al momento dell'avvio registrandosi nel manifesto per ricevere ACTION_BOOT_COMPLETED
. Avvia appena un servizio durante la ricezione di ACTION_BOOT_COMPLETED
. Lo Service
registra a sua volta lo BroadcastReceiver
quindi per lo ACTION_TIME_TICK
.
La logica dell'app verrà implementata nello BroadcastReceiver
.
- 1. Come avviare automaticamente il servizio in Android?
- 2. Come avviare il servizio Android all'installazione
- 3. Android: avviare il servizio all'avvio, ma non avviare la GUI
- 4. Come avviare il servizio Android da un'altra app Android
- 5. come avviare il servizio in Android senza attività
- 6. Come avviare un servizio quando il dispositivo Android è acceso?
- 7. Impossibile avviare il servizio Windows
- 8. Come avviare automaticamente il servizio nodo?
- 9. come avviare il servizio dai frammenti
- 10. Impossibile avviare il servizio mongodb
- 11. PhoneGap. Impossibile avviare il servizio di geolocalizzazione
- 12. Impossibile avviare il servizio Puppetserver
- 13. Android: Stop/avviare il servizio creato nel onCreate()
- 14. Android: avviare il servizio con Context.startService vs PendingIntent.getService
- 15. Come avviare un servizio Android da un'attività e interrompere il servizio in un'altra attività?
- 16. "Impossibile avviare il servizio intenti" l'errore quando si avvia il servizio da un'attività in Android
- 17. Avviare l'applicazione Android senza attività principale e avviare il servizio all'avvio dell'applicazione
- 18. Impossibile avviare il servizio Intenzione: non trovato
- 19. Impossibile avviare il servizio cygwin sshd
- 20. , "Impossibile avviare il servizio di raccolta standard"
- 21. Come fare avviare il servizio Windows come "Automatico (avvio ritardato)"
- 22. Disattiva customErrors solo per il servizio Web
- 23. PendingIntent per avviare e interrompere un servizio
- 24. Come testare il servizio di assistenza remota per android
- 25. Come avviare il dispositivo Android all'accensione?
- 26. Servizio di avvio NFC per Android
- 27. Avviare MySQL Server come servizio (Win 8)
- 28. Come interrompere il servizio da solo?
- 29. Come avviare un'attività da un servizio?
- 30. Come avviare e interrompere il servizio Android da una shell adb?
Non l'ho provato da solo, ma sarebbe possibile avviare un servizio dall'oggetto Application? – phreed
Penso che funzioni http://android-codes-examples.blogspot.com/2011/11/running-service-in-background-on.html – Android