wake-up-neo.net

So starten Sie die Android-App nur für den Dienst

Ich erstelle eine Anwendung, deren einzige Komponente eine service ist, die im Hintergrund läuft (im Wesentlichen ein Proxyserver), aber ich finde keinen Weg, wie Sie diesen Dienst starten können. Die Anwendung kann keine Benutzeroberfläche oder Benutzerinteraktion haben, daher verwende ich keine Aktivität.
Broadcast receiver kann BOOT-Sendungen abhören, aber wie starte ich den Service zum ersten Mal, wenn er installiert ist, und wie kann ich ihn weiter betreiben? Oder gibt es eine Sendung, die ich nach der Installation der App anhören kann, z. mag TIME_TICK sein, aber das muss von meiner Aktivität aus registriert werden.

46
Anurag Uniyal

Leider gibt es momentan keine zuverlässige Möglichkeit, ein Broadcast-Ereignis zu empfangen, nachdem Ihr Anwendungsprogramm installiert wurde. Das ACTION_PACKAGE_ADDED Intent sendet nicht an das neu installierte Paket.

Um das Ereignis ACTION_BOOT_COMPLETED zu erhalten, müssen Sie eine Rundfunkempfängerklasse sowie Ihren Dienst haben. Ich würde auch empfehlen, die ACTION_USER_PRESENT - Absicht hinzuzufügen, um von diesem Rundfunkempfänger abgefangen zu werden. Dies erfordert Android 1.5 (minSDK = 3). Dies ruft Ihren Rundfunkempfänger immer dann auf, wenn der Benutzer das Telefon entsperrt. Das Letzte, was Sie tun können, um den Dienst aufrecht zu erhalten, ohne dass er automatisch heruntergefahren werden muss, ist das Aufrufen von Service.setForeground () in Ihrem Dienst onCreate, um Android mitzuteilen, dass Ihr Dienst nicht angehalten werden sollte. Dies wurde hauptsächlich für MP3-Player-Dienste hinzugefügt, die ständig ausgeführt werden müssen, aber von jedem Dienst verwendet werden können.

Stellen Sie sicher, dass Sie die richtigen Berechtigungen für die Ereignisse boot_complete und user_present in Ihrem Manifest hinzufügen.

Hier ist eine einfache Klasse, die Sie als Rundfunkempfänger für die Ereignisse verwenden können.

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

Viel Glück.

43
snctln

Rückgabe START_STICKY in Service.onStartCommand

Android startet Ihren Dienst neu

14
shaobin0604

Ich forsche zum selben Thema. Folgendes habe ich gefunden: http://kfb-Android.blogspot.de/2009/04/registering-for-timetick-after-reboot.html

Diese einfache kleine Demo zeigt eine Lösung, indem sie ein wenig Ping-Pong zwischen einer BroadcatReceiver und einer Service spielt. Der Empfänger ist zum Startzeitpunkt registriert, indem er sich im Manifest registriert, um ACTION_BOOT_COMPLETED zu empfangen. Es startet gerade einen Dienst, wenn ACTION_BOOT_COMPLETED empfangen wird. Die Service registriert wiederum die BroadcastReceiver und dann das ACTION_TIME_TICK.

Die App-Logik wird in der BroadcastReceiver implementiert.

0
jboi