web-dev-qa-db-fra.com

Comment démarrer l'application Android uniquement

Je crée une application dont le seul composant est une service qui continue à s'exécuter en arrière-plan (essentiellement un serveur proxy), mais je ne parviens pas à trouver le moyen de démarrer ce service. L'application ne peut pas avoir d'interface utilisateur ni d'interaction avec l'utilisateur, donc je n'utilise pas Activity.
Broadcast receiver peut écouter la diffusion BOOT, mais comment puis-je démarrer le service pour la première fois après son installation et comment puis-je le faire fonctionner? .__ ou existe-t-il une émission que je peux écouter une fois l'application installée, par exemple? peut être TIME_TICK mais cela doit être enregistré à partir d’une activité je pense.

46
Anurag Uniyal

Malheureusement, pour le moment, il n’existe aucun moyen fiable de recevoir un événement de diffusion une fois votre application installée, l’intention ACTION_PACKAGE_ADDED n’est pas diffusée vers le package nouvellement installé.

Pour pouvoir recevoir l'événement ACTION_BOOT_COMPLETED , vous devez disposer d'une classe de récepteur de diffusion ainsi que de votre service. Je recommanderais également d’ajouter l’intention ACTION_USER_PRESENT de se faire attraper par ce récepteur de diffusion; cela nécessite Android 1.5 (minSDK = 3). Ceci appellera votre récepteur de diffusion lorsque l’utilisateur déverrouille son téléphone. La dernière chose que vous pouvez faire pour que votre service continue de fonctionner sans l'avoir facilement arrêté automatiquement est d'appeler Service.setForeground () dans votre service onCreate pour indiquer à Android que votre service ne doit pas être arrêté, ceci a été ajouté principalement pour les services de type lecteur mp3 qui doivent continuer à fonctionner mais peuvent être utilisés par n'importe quel service.

Assurez-vous d’ajouter les autorisations appropriées pour les événements boot_complete et user_present dans votre manifeste.

Voici une classe simple que vous pouvez utiliser comme récepteur de diffusion pour les événements.

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));
            }
        }
    }
};

Bonne chance.

43
snctln

Retourne START_STICKY dans Service.onStartCommand

Android va redémarrer votre service

14
shaobin0604

Je recherche sur le même sujet. Voici ce que j'ai trouvé: http://kfb-Android.blogspot.de/2009/04/registering-for-timetick-after-reboot.html

Cette petite démo simple montre une solution en jouant un peu de ping-pong entre un BroadcatReceiver et un Service. Le récepteur est enregistré pour démarrer au démarrage en s’inscrivant dans le manifeste pour recevoir ACTION_BOOT_COMPLETED. Il commence simplement un service lors de la réception de ACTION_BOOT_COMPLETED. La Service enregistre à son tour la BroadcastReceiver puis le ACTION_TIME_TICK.

La logique de l'application sera implémentée dans la BroadcastReceiver.

0
jboi