Cara memulai layanan pada boot perangkat (aplikasi autorun, dll.)
Untuk pertama: sejak versi Android 3.1+ Anda tidak menerima BOOT_COMPLETE jika pengguna tidak pernah memulai aplikasi Anda setidaknya sekali atau aplikasi "paksa ditutup" pengguna. Ini dilakukan untuk mencegah malware secara otomatis mendaftarkan layanan. Lubang keamanan ini ditutup di versi Android yang lebih baru.
Larutan:
Buat aplikasi dengan aktivitas. Ketika pengguna menjalankannya sekali aplikasi dapat menerima pesan broadcast BOOT_COMPLETE.
Untuk yang kedua: BOOT_COMPLETE dikirim sebelum penyimpanan eksternal dipasang. Jika aplikasi dipasang ke penyimpanan eksternal, ia tidak akan menerima pesan siaran BOOT_COMPLETE.
Dalam hal ini ada dua solusi:
- Instal aplikasi Anda ke penyimpanan internal
- Instal aplikasi kecil lain di penyimpanan internal. Aplikasi ini menerima BOOT_COMPLETE dan menjalankan aplikasi kedua pada penyimpanan eksternal.
Jika aplikasi Anda sudah terpasang di penyimpanan internal maka kode di bawah ini dapat membantu Anda memahami cara memulai layanan saat boot perangkat.
Di Manifest.xml
Izin:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Daftarkan penerima BOOT_COMPLETED Anda:
<receiver android:name="org.yourapp.OnBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
Daftarkan layanan Anda:
<service android:name="org.yourapp.YourCoolService" />
Di penerima OnBoot.java:
public class OnBoot extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// Create Intent
Intent serviceIntent = new Intent(context, YourCoolService.class);
// Start service
context.startService(serviceIntent);
}
}
Untuk HTC, Anda mungkin perlu juga menambahkan Manifest kode ini jika perangkat tidak menangkap RECEIVE_BOOT_COMPLETED:
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
Penerima sekarang terlihat seperti ini:
<receiver android:name="org.yourapp.OnBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
Bagaimana cara menguji BOOT_COMPLETED tanpa me-restart emulator atau perangkat asli? Mudah. Coba ini:
adb -s device-or-emulator-id shell am broadcast -a android.intent.action.BOOT_COMPLETED
Bagaimana cara mendapatkan id perangkat? Dapatkan daftar perangkat yang terhubung dengan id:
adb devices
adb di ADT secara default dapat Anda temukan di:
adt-installation-dir/sdk/platform-tools
Nikmati! )