Jawaban:
Pertama, Anda perlu izin di AndroidManifest.xml
:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Selain itu, di Anda AndroidManifest.xml
, tentukan layanan Anda dan dengarkan tindakan BOOT_COMPLETED :
<service android:name=".MyService" android:label="My Service">
<intent-filter>
<action android:name="com.myapp.MyService" />
</intent-filter>
</service>
<receiver
android:name=".receiver.StartMyServiceAtBootReceiver"
android:label="StartMyServiceAtBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
Maka Anda perlu mendefinisikan penerima yang akan mendapatkan tindakan BOOT_COMPLETED dan memulai layanan Anda.
public class StartMyServiceAtBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
Intent serviceIntent = new Intent(context, MyService.class);
context.startService(serviceIntent);
}
}
}
Dan sekarang layanan Anda harus berjalan ketika telepon dinyalakan.
Intent.ACTION_BOOT_COMPLETED
alih-alih-mengkode string pada Receiver Anda. Juga, harus menggunakan Intent(context, MySystemService.class)
konstruktor baru saat membuat Intent.
Multiple markers at this line - BroadcastReceiver cannot be resolved to a type - The public type StartMyServiceAtBootReceiver must be defined in its own file
pada public class
baris. Ada ide?
Ini adalah cara membuat aktivitas mulai berjalan setelah perangkat Android dinyalakan ulang:
Masukkan kode ini ke AndroidManifest.xml
file Anda , di dalam <application>
elemen ( bukan di dalam <activity>
elemen):
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver
android:enabled="true"
android:exported="true"
android:name="yourpackage.yourActivityRunOnStartup"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
Kemudian buat kelas baru yourActivityRunOnStartup
(cocok dengan yang android:name
ditentukan untuk <receiver>
elemen dalam manifes):
package yourpackage;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class yourActivityRunOnStartup extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Intent i = new Intent(context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
}
Catatan: Panggilan i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
itu penting karena aktivitas diluncurkan dari konteks di luar aktivitas. Tanpa ini, aktivitas tidak akan dimulai.
Juga, nilainya android:enabled
, android:exported
dan android:permission
dalam <receiver>
tag tampaknya tidak wajib. Aplikasi menerima acara tanpa nilai-nilai ini. Lihat contoh di sini .
Application
? Mungkin di dalam onCreate()
?
onReceive()
sebuahBroadcastReceiver
Dengarkan ACTION_BOOT_COMPLETE dan lakukan apa yang Anda butuhkan dari sana. Ada cuplikan kode di sini.
Memperbarui:
Tautan orisinal pada jawaban tidak berfungsi, jadi berdasarkan komentar, ini adalah kode tertaut, karena tidak ada yang akan melewatkan kode ketika tautan tidak aktif.
Di AndroidManifest.xml (aplikasi-bagian):
<receiver android:enabled="true" android:name=".BootUpReceiver"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
...
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
...
public class BootUpReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, MyActivity.class); //MyActivity can be anything which you want to start on bootup...
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
Selain itu Anda dapat menggunakan aplikasi seperti AutoStart jika Anda tidak ingin memodifikasi kode, untuk meluncurkan aplikasi android saat startup: AutoStart - Tidak ada root
Solusi Sean awalnya tidak bekerja untuk saya (Android 4.2.2). Saya harus menambahkan aktivitas dummy ke proyek Android yang sama dan menjalankan aktivitas secara manual di perangkat setidaknya satu kali. Kemudian solusi Sean mulai bekerja dan BroadcastReceiver diberitahukan setelah reboot berikutnya.
Saya ingin menambahkan satu poin dalam pertanyaan ini yang saya hadapi selama beberapa hari. Saya mencoba semua jawaban tetapi itu tidak berhasil untuk saya. Jika Anda menggunakan Android versi 5.1, silakan ubah pengaturan ini.
Jika Anda menggunakan Android versi 5.1 maka Anda harus memilih (Batasi untuk memulai) dari pengaturan aplikasi.
pengaturan> aplikasi> aplikasi Anda> Batasi untuk memulai (dis-pilih)
Pendekatan lain adalah menggunakan android.intent.action.USER_PRESENT
alih-alih android.intent.action.BOOT_COMPLETED
untuk menghindari memperlambat selama proses boot. Tapi ini hanya true
jika pengguna telah mengaktifkan Layar kunci - jika tidak, maksud ini tidak pernah disiarkan.
Referensi blog - Masalah dengan Maksud Android ACTION_USER_PRESENT