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 menggunakanIntent(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
padapublic 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):Kemudian buat kelas baru
yourActivityRunOnStartup
(cocok dengan yangandroid:name
ditentukan untuk<receiver>
elemen dalam manifes):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
danandroid:permission
dalam<receiver>
tag tampaknya tidak wajib. Aplikasi menerima acara tanpa nilai-nilai ini. Lihat contoh di sini .sumber
Application
? Mungkin di dalamonCreate()
?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):
...
...
Sumber: https://web.archive.org/web/20150520124552/http://www.androidsnippets.com/autostart-an-application-at-bootup
sumber
Selain itu Anda dapat menggunakan aplikasi seperti AutoStart jika Anda tidak ingin memodifikasi kode, untuk meluncurkan aplikasi android saat startup: AutoStart - Tidak ada root
sumber
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.
sumber
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)
sumber
Pendekatan lain adalah menggunakan
android.intent.action.USER_PRESENT
alih-alihandroid.intent.action.BOOT_COMPLETED
untuk menghindari memperlambat selama proses boot. Tapi ini hanyatrue
jika pengguna telah mengaktifkan Layar kunci - jika tidak, maksud ini tidak pernah disiarkan.Referensi blog - Masalah dengan Maksud Android ACTION_USER_PRESENT
sumber