Heim >Java >javaLernprogramm >Warum startet mein Android-Dienst beim Booten nicht?
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>
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); } }
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:
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>
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"); } }
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"); } }
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(); } }
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!