Comment démarrer le service-seulement L'application Android

je crée une application dont le seul composant est un service qui continue à fonctionner en arrière-plan (essentiellement un serveur proxy) mais je ne suis pas en mesure de trouver un moyen de démarrer ce service. L'application ne peut pas avoir D'interface utilisateur ou d'interaction utilisateur, donc je n'utilise pas L'activité.

Broadcast receiver peut écouter la diffusion de BOOT mais comment puis-je démarrer le service la première fois qu'il est installé et comment puis-je le garder en marche? ou est-il une émission qui je peux écouter après l'application est installée par exemple, peut être TIME_TICK mais cela doit être enregistré de l'activité je pense.

46
demandé sur Community 2009-06-13 11:25:46

3 réponses

malheureusement en ce moment il n'y a pas de façon fiable de recevoir un événement de diffusion après que votre applicaiton a été installé, le ACTION_PACKAGE_ADDED L'intention n'est pas transmise au paquet nouvellement installé.

Vous devrez avoir une classe de récepteur de radiodiffusion ainsi que votre service pour recevoir le ACTION_BOOT_COMPLETED événement. Je vous recommande également l'ajout de l' ACTION_USER_PRESENT intention de se faire prendre par cette émission récepteur, cela nécessite Android 1.5 (minSDK=3), cela appellera votre récepteur de diffusion chaque fois que l'utilisateur déverrouille leur téléphone. La dernière chose que vous pouvez faire pour essayer de garder le fonctionnement de votre service sans avoir facilement être arrêté automatiquement est d'appeler Service.setForeground () dans votre service onCreate pour dire à Android que votre service ne devrait pas être arrêté, cela 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 permissions 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
répondu snctln 2009-06-13 16:10:19

Retour START_STICKYService.onStartCommand

Android va redémarrer votre service

14
répondu shaobin0604 2016-09-27 11:42:38

je fais des recherches sur le même sujet. Ici, c'est ce que j'ai trouvé: http://kfb-android.blogspot.de/2009/04/registering-for-timetick-after-reboot.html

simple petite démo montre une solution en jouant un peu de ping-pong entre un BroadcatReceiver et Service. Le Récepteur est enregistré au démarrage en s'inscrivant dans le Manifeste de recevoir ACTION_BOOT_COMPLETED. Il ne fait que commencer un service lors de la réception ACTION_BOOT_COMPLETED. Service à son tour registeres BroadcastReceiver ensuite, pour le ACTION_TIME_TICK.

la logique app sera implémentée dans le BroadcastReceiver.

0
répondu jboi 2018-01-08 17:24:56