Nach allem, was ich in Stack Exchange und anderswo gesehen habe, habe ich alles richtig eingerichtet, um einen IntentService beim Starten des Android-Betriebssystems zu starten. Leider startet es nicht beim Booten und ich erhalte keine Fehler. Vielleicht können die Experten helfen ...
Manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.phx.batterylogger"
android:versionCode="1"
android:versionName="1.0"
android:installLocation="internalOnly">
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BATTERY_STATS" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<service android:name=".BatteryLogger"/>
<receiver android:name=".StartupIntentReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
</manifest>
BroadcastReceiver für den Start:
package com.phx.batterylogger;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class StartupIntentReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context, BatteryLogger.class);
context.startService(serviceIntent);
}
}
UPDATE : Ich habe fast alle der folgenden Vorschläge ausprobiert und die Protokollierung hinzugefügt, z. B. Log.v("BatteryLogger", "Got to onReceive, about to start service");
zum onReceive-Handler des StartupIntentReceiver, und es wird nie etwas protokolliert. Es schafft es also nicht einmal zum BroadcastReceiver.
Ich denke, ich stelle das APK bereit und teste es korrekt. Ich führe nur Debug in Eclipse aus und die Konsole meldet, dass es erfolgreich auf meinem Xoom-Tablet unter \ BatteryLogger \ bin \ BatteryLogger.apk installiert wurde. Zum Testen starte ich das Tablet neu und schaue mir dann die Protokolle in DDMS an und überprüfe die laufenden Dienste in den Betriebssystemeinstellungen. Klingt das alles richtig oder fehlt mir etwas? Auch hier wird jede Hilfe sehr geschätzt.
Log.v("BatteryLogger", "Got to onReceive, about to start service");
habe den onReceive-Handler hinzugefügt und er wird nie in den Protokollen angezeigt. Also der Hörer versagt (?)Antworten:
Hier ist ein vollständiges Beispiel für eine AutoStart-Anwendung
AndroidManifest-Datei
autostart.java
service.java
hello.java - Dies wird jedes Mal angezeigt, wenn Sie das Gerät starten, nachdem Sie die Anwendung einmal ausgeführt haben.
quelle
Ihr Dienst wird möglicherweise vor dem Abschluss heruntergefahren, da das Gerät nach dem Booten in den Ruhezustand wechselt. Sie müssen zuerst eine Wecksperre erhalten. Glücklicherweise gibt uns die Support-Bibliothek eine Klasse , um dies zu tun:
Stellen Sie dann in Ihrem Dienst sicher, dass die Wecksperre aufgehoben wird:
Vergessen Sie nicht, die WAKE_LOCK-Berechtigung hinzuzufügen:
quelle
Folgendes sollte funktionieren. Ich habe überprüft. Vielleicht liegt dein Problem woanders.
quelle
Log()
Anweisungen darin enthalten ist und das Emulatorgerät meinen Dienst nicht als in den Betriebssystemeinstellungen ausgeführt anzeigt. Hier ist der Fehler in DDMS:System.err - at com.phx.batterylogger$1.onReceive(BatteryLogger.java:43)
Bedeutet das, dass das Problem in Zeile 43 meines BatteryLogger-Dienstes auftritt?Ich habe eine Möglichkeit gefunden, Ihre Anwendung beim Neustart des Geräts ordnungsgemäß auszuführen. Führen Sie die folgenden Schritte aus, um erfolgreich zu sein.
AndroidManifest-Datei
UIBootReceiver
Hiermit wird um Erlaubnis gebeten, die Batteriesparleistung für diese App nicht verwalten zu müssen, damit Sie stabil im Hintergrund ausgeführt werden können.
Deklarieren Sie diesen Code in onCreate () der MainActivity-Klasse:
quelle
Sieht mir sehr ähnlich, aber ich verwende den vollständigen Paketnamen für den Empfänger:
Ich habe:
quelle
Ich hatte Erfolg ohne das vollständige Paket. Wissen Sie, wo die Anrufkette unterbrochen wird? Wenn Sie mit debuggen
Log()
's , ab wann funktioniert es nicht mehr?Ich denke, es kann in Ihrem IntentService sein, das alles sieht gut aus.
quelle
Log.v("BatteryLogger", "Got to onReceive, about to start service");
habe den onReceive-Handler hinzugefügt und er wird nie in den Protokollen angezeigt. Also der Hörer versagt (?)Um die Suche zu vereinfachen, ist
dies, wie in den Kommentaren erwähnt,seit 3.1https://stackoverflow.com/a/19856367/6505257nicht mehr möglichquelle