Heim > Java > javaLernprogramm > Warum startet mein Android-Dienst beim Booten nicht?

Warum startet mein Android-Dienst beim Booten nicht?

Barbara Streisand
Freigeben: 2024-12-12 20:42:18
Original
742 Leute haben es durchsucht

Why Isn't My Android Service Starting on Boot?

Starten eines Dienstes beim Android-Booten

Die Implementierung der richtigen Konfiguration zum automatischen Starten eines Dienstes beim Android-Betriebssystem-Booten ist von entscheidender Bedeutung. Auch wenn scheinbar alles richtig eingerichtet ist, kann es zugrunde liegende Probleme geben, die das gewünschte Verhalten verhindern.

Android-Manifest

Überprüfen Sie das bereitgestellte Android-Manifest:

<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>
Nach dem Login kopieren

Stellen Sie sicher, dass die BOOT_COMPLETED-Aktion im registriert ist IntentReceiver.

BroadcastReceiver für Startup

Überprüfen Sie als Nächstes den StartupIntentReceiver:

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);
    }
}
Nach dem Login kopieren

Dieser Empfänger sollte auf die BOOT_COMPLETED-Aktion warten und die starten gewünscht Dienst.

Fehlerbehebung

Wenn der Dienst beim Booten nicht startet, beachten Sie die folgenden Schritte:

  • Überprüfen Sie, ob die Protokolle Folgendes anzeigen Der Empfänger empfängt die BOOT_COMPLETED-Übertragung.
  • Überprüfen Sie, ob der Zieldienst ordnungsgemäß deklariert und konfiguriert ist Manifest.
  • Stellen Sie sicher, dass der Zieldienst nicht vom System deaktiviert oder optimiert wird.
  • Erwägen Sie die Verwendung der API Context.startForegroundService(Intent intent, int notificationId), um den Dienst im Vordergrund zu starten ( verfügbar in API-Level 26 und höher).

Abgeschlossen Beispiel

Ein umfassendes Beispiel einer AutoStart-Anwendung finden Sie im folgenden Code Ausschnitt:

AndroidManifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="pack.saltriver" android:versionCode="1" android:versionName="1.0">

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

    <application android:icon="@drawable/icon" android:label="@string/app_name">

        <receiver android:name=".autostart">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <activity android:name=".hello"></activity>
        <service android:enabled="true" android:name=".service" />
    </application>
</manifest>
Nach dem Login kopieren

autostart.java

public class autostart extends BroadcastReceiver 
{
    public void onReceive(Context context, Intent arg1) 
    {
        Intent intent = new Intent(context,service.class);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            context.startForegroundService(intent);
        } else {
            context.startService(intent);
        }
        Log.i("Autostart", "started");
    }
}
Nach dem Login kopieren

service.java

public class service extends Service
{
    private static final String TAG = "MyService";
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    public void onDestroy() {
        Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onDestroy");
    }

    @Override
    public void onStart(Intent intent, int startid)
    {
        Intent intents = new Intent(getBaseContext(),hello.class);
        intents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intents);
        Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onStart");
    }
}
Nach dem Login kopieren

hello.java

public class hello extends Activity 
{   
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Toast.makeText(getBaseContext(), "Hello........", Toast.LENGTH_LONG).show();
    }
}
Nach dem Login kopieren

Implementierung Diese Schritte sollten sorgfältig durchgeführt werden, um sicherzustellen, dass Ihr Android-Dienst beim Betriebssystemstart erfolgreich startet.

Das obige ist der detaillierte Inhalt vonWarum startet mein Android-Dienst beim Booten nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage