344 Stimmen

Versuchen, einen Dienst beim Booten unter Android zu starten

Ich habe versucht, einen Dienst zu starten, wenn ein Gerät unter Android hochfährt, aber ich kann es nicht zum Laufen bringen. Ich habe mir eine Reihe von Links im Internet angesehen, aber keiner der Codes funktioniert. Habe ich etwas vergessen?

AndroidManifest.xml

<receiver
    android:name=".StartServiceAtBootReceiver"
    android:enabled="true"
    android:exported="false"
    android:label="StartServiceAtBootReceiver" >
    <intent-filter>
        <action android:name="android.intent.action._BOOT_COMPLETED" />
    </intent-filter>
</receiver>

<service
    android:name="com.test.RunService"
    android:enabled="true" />

BroadcastReceiver

public void onReceive(Context context, Intent intent) {
    if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
        Intent serviceLauncher = new Intent(context, RunService.class);
        context.startService(serviceLauncher);
        Log.v("TEST", "Service loaded at start");
    }
}

13voto

RickNotFred Punkte 3321

Ich denke, Ihr Manifest muss ergänzt werden:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

13voto

Omer Akhter Punkte 245

Ich habe soeben herausgefunden, dass es an folgenden Faktoren liegen könnte Fast Boot Option in Settings > Power

Wenn ich diese Option ausschalte, empfängt meine Anwendung diese Übertragung, aber sonst nicht.

Übrigens, ich habe Android 2.3.3 en HTC Incredible S .

Ich hoffe, es hilft.

7voto

Amir Punkte 604

Nachdem ich alle genannten Antworten und Tricks ausprobiert habe, habe ich endlich herausgefunden, warum der Code auf meinem Telefon nicht funktioniert. Einige Android-Handys wie "Huawei Honor 3C Android 4.2.2 " haben eine Statup Manager in den Einstellungen und Ihre App muss in der Liste markiert sein. :)

5voto

Nick Punkte 3486

Ich habe eine zusätzliche <category> -Tag, ich weiß nicht, ob das einen Unterschied macht.

<receiver android:name="BootIntentReceiver">  
        <intent-filter>  
            <action android:name="android.intent.action.BOOT_COMPLETED" />  
            <category android:name="android.intent.category.HOME" />  
        </intent-filter>  
</receiver>

Haben Sie versucht, die if-Klausel wegzulassen "android.intent.action.BOOT_COMPLETED".equals(intent.getAction() da der Empfänger wahrscheinlich ohnehin nur diese Absicht empfängt?

5voto

San Juan Punkte 105

Das habe ich getan

1. Ich habe die Receiver-Klasse

public class BootReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //whatever you want to do on boot
       Intent serviceIntent = new Intent(context, YourService.class);
       context.startService(serviceIntent);
    }
}

2.im Manifest

<manifest...>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <application...>
        <receiver android:name=".BootReceiver" android:enabled="true" android:exported="false">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
    ...

3. und nach ALLEN Sie MÜSSEN den Empfänger in Ihrer MainActivity "setzen", es kann innerhalb der onCreate sein

...
 final ComponentName onBootReceiver = new ComponentName(getApplication().getPackageName(), BootReceiver.class.getName());
        if(getPackageManager().getComponentEnabledSetting(onBootReceiver) != PackageManager.COMPONENT_ENABLED_STATE_ENABLED)
        getPackageManager().setComponentEnabledSetting(onBootReceiver,PackageManager.COMPONENT_ENABLED_STATE_ENABLED,PackageManager.DONT_KILL_APP);
...

der letzte Schritt, den ich von ApiDemos gelernt habe

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X