So starten Sie den Dienst beim Gerätestart (Autorun-App usw.)
Zum einen: Seit der Version Android 3.1+ erhalten Sie BOOT_COMPLETE nicht mehr, wenn der Benutzer Ihre App nie mindestens einmal gestartet hat oder der Benutzer die Anwendung "erzwingen". Dies wurde durchgeführt, um zu verhindern, dass Malware den Dienst automatisch registriert. Diese Sicherheitslücke wurde in neueren Versionen von Android geschlossen.
Lösung:
App mit Aktivität erstellen. Wenn der Benutzer es einmal ausführt, kann die App die Broadcast-Nachricht BOOT_COMPLETE empfangen.
Zum zweiten: BOOT_COMPLETE wird gesendet, bevor der externe Speicher bereitgestellt wird. Wenn die App auf einem externen Speicher installiert ist, empfängt sie keine BOOT_COMPLETE-Broadcast-Nachricht.
In diesem Fall gibt es zwei Lösungen:
- Installieren Sie Ihre App im internen Speicher
- Installieren Sie eine weitere kleine App im internen Speicher. Diese App empfängt BOOT_COMPLETE und führt die zweite App auf einem externen Speicher aus.
Wenn Ihre App bereits im internen Speicher installiert ist, kann Ihnen der folgende Code helfen, den Dienst beim Gerätestart zu starten.
In Manifest.xml
Genehmigung:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Registrieren Sie Ihren BOOT_COMPLETED-Empfänger:
<receiver android:name="org.yourapp.OnBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
Registrieren Sie Ihren Service:
<service android:name="org.yourapp.YourCoolService" />
Im Empfänger OnBoot.java:
public class OnBoot extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// Create Intent
Intent serviceIntent = new Intent(context, YourCoolService.class);
// Start service
context.startService(serviceIntent);
}
}
Für HTC müssen Sie diesen Code möglicherweise auch in Manifest hinzufügen, wenn das Gerät RECEIVE_BOOT_COMPLETED nicht abfängt:
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
Der Empfänger sieht jetzt so aus:
<receiver android:name="org.yourapp.OnBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
Wie kann man BOOT_COMPLETED testen, ohne den Emulator oder das reale Gerät neu zu starten? Es ist einfach. Versuche dies:
adb -s device-or-emulator-id shell am broadcast -a android.intent.action.BOOT_COMPLETED
Wie erhalte ich die Geräte-ID? Liste der verbundenen Geräte mit IDs abrufen:
adb devices
adb in ADT finden Sie standardmäßig in:
adt-installation-dir/sdk/platform-tools
Genießen! )