Mulakan Perkhidmatan pada But Android
Melaksanakan konfigurasi yang betul untuk memulakan perkhidmatan secara automatik semasa but Android OS adalah penting. Walaupun nampaknya semuanya telah disediakan dengan betul, mungkin terdapat isu asas yang menghalang gelagat yang diingini.
Manifest Android
Semak Manifes Android yang disediakan:
<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>
Pastikan tindakan BOOT_COMPLETED didaftarkan dalam IntentReceiver.
BroadcastReceiver for Startup
Seterusnya, semak 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); } }
Penerima ini sepatutnya mendengar tindakan BOOT_COMPLETED dikehendaki perkhidmatan.
Menyelesaikan masalah
Jika perkhidmatan tidak bermula semasa but, pertimbangkan langkah berikut:
Contoh Lengkap
Untuk contoh menyeluruh bagi aplikasi AutoStart, rujuk kod berikut coretan:
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(); } }
Melaksanakan langkah ini harus memastikan perkhidmatan Android anda berjaya dimulakan semasa but OS.
Atas ialah kandungan terperinci Mengapa Perkhidmatan Android Saya Tidak Dimulakan semasa But?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!