7.3: Broadcast Receivers
Task 1. Set up the PowerReceiver Project
Aplikasi PowerReceiver akan mendaftarkan BroadcastReceiver yang menampilkan pesan Toast saat perangkat terhubung atau terputus dari aliran listrik. Aplikasi ini juga akan mengirimkan dan menerima Intent Broadcast khusus untuk menampilkan pesan Toast yang berbeda.
1.1 Create the Project
- Membuat proyek baru bernama PowerReceiver, menerima opsi default dan menggunakan template Empty.
- Membuat Penerima Siaran baru. Pilih nama paket dalam Tampilan Proyek Android dan buka File > New > Other > Broadcast Receiver.
-
Beri nama kelasnya CustomReceiver dan pastikan “Exported” dan “Enabled” dicentang.
- Buka file manifes Android. Ingat bahwa Android Studio secara otomatis membuat tag
<receiver>
dengan opsi terpilih sebagai atribut. BroadcastReceivers juga bisa didaftarkan secara program, tetapi lebih mudah mendefinisikannya dalam manifes.
1.2 Register your Receiver for system broadcasts
Untuk menerima siaran apa pun, pertama-tama Anda perlu menentukan intent siaran mana yang Anda minati.
Dalam file AndroidManifest.xml, tambahkan kode berikut di antara tag <receiver>
untuk mendaftarkan Penerima Anda untuk Intent sistem:
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
1.3 Implement onReceive() in your BroadcastReceiver
- Buka file CustomReceiver, dan hapus implementasi default dalam metode
onReceive()
. - Dapatkan tindakan dari intent dan simpan dalam variabel
String
bernamaintentAction
:@Override public void onReceive(Context context, Intent intent) { String intentAction = intent.getAction(); }
- Buat pernyataan
switch
dengan stringintentAction
, agar aplikasi dapat menampilkan pesan toast yang berbeda untuk setiap tindakan spesifik yang didaftarkan kepada penerima:switch (intentAction){ case Intent.ACTION_POWER_CONNECTED: break; case Intent.ACTION_POWER_DISCONNECTED: break; }
- Inisialisasi variabel
String
bernamatoastMessage
sebelum pernyataanswitch
, dan jadikan nilainyanull
agar bisa disetel tergantung pada tindakan siaran yang Anda terima. - Tetapkan
toastMessage
ke “Power connected!” jika tindakannyaACTION_POWER_CONNECTED
, dan “Power disconnected!” jikaACTION_POWER_DISCONNECTED
. Ekstrak sumber daya string. - Tampilkan pesan toast untuk durasi pendek setelah pernyataan switch:
Toast.makeText(context, toastMessage, Toast.LENGTH_SHORT).show();
1.4 Restrict your Broadcast Receiver
Agar penerima siaran hanya aktif ketika aplikasi ditampilkan, aktifkan penerima dalam onStart()
dan nonaktifkan dalam onStop()
.
Buat dua variabel anggota: PackageManager dan ComponentName.
Inisialisasi keduanya di onCreate()
.
Inisialisasi PackageManager dengan getPackageManager()
. Konstruktor untuk ComponentName memerlukan konteks aplikasi dan nama kelas komponen:
mReceiverComponentName = new ComponentName(this, CustomReceiver.class); mPackageManager = getPackageManager();
GantionStart()
danonStop()
:
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onStop() {
super.onStop();
}
Panggil setComponentEnabledSetting()
di PackageManager dalam onStart()
. Teruskan nama Komponen, konstanta PackageManager.COMPONENT_ENABLED_STATE_ENABLED
, dan bendera DONT_KILL_APP
:
mPackageManager.setComponentEnabledSetting
(mReceiverComponentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
Dalam onStop()
, gunakan PackageManager untuk menonaktifkan CustomReceiver, menggunakan konstanta PackageManager.COMPONENT_ENABLED_STATE_DISABLED
:
mPackageManager.setComponentEnabledSetting
(mReceiverComponentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
Task 2. Send and Receive a Custom Broadcast
Selain merespons siaran sistem, aplikasi juga dapat mengirimkan dan menerima Intent Siaran khusus.
2.1 Define your custom Broadcast Action string
Pengirim dan penerima siaran khusus harus menyetujui string tindakan untuk Intent Siaran. Membuat string tindakan unik dengan menambahkan Nama Tindakan di depannya dengan nama paket adalah praktik yang biasa.
- Buat variabel
String
konstan dalam MainActivity dan kelas CustomReceiver untuk digunakan sebagai Tindakan Intent Siaran (ini adalah string tindakan khusus):private static final String ACTION_CUSTOM_BROADCAST = "com.example.android.powerreceiver.ACTION_CUSTOM_BROADCAST";
2.2 Add a “Send Custom Broadcast” Button
- Dalam file activity_main.xml, tambahkan tampilan Tombol dengan atribut berikut:
Atribut
Nilai
android:id
“@+id/sendBroadcast”
android:layout_width
wrap_content
android:layout_height
wrap_content
android:text
“Send Custom Broadcast”
android:layout_margin
“8dp”
android:onClick
“sendCustomBroadcast”
- Ekstrak sumber daya string.
- Buat stub untuk metode
sendCustomBroadcast()
: Klik pada nama metode onClick. Tekan Alt (Option untuk pengguna Mac) + Enter dan pilih ‘Create ‘sendCustomBroadcast(View)’ dalam ‘MainActivity’.
2.3 Implement sendCustomBroadcast()
Karena siaran ini ditujukan untuk digunakan hanya oleh aplikasi Anda, gunakan LocalBroadcastManager untuk mengelola siaran dalam aplikasi. LocalBroadcastManager adalah kelas yang mengizinkan Anda untuk mendaftar dan mengirim siaran Intent ke objek lokal dalam aplikasi.
- Dalam metode
sendCustomBroadcast()
di MainActivity, buat Intent baru, dengan string tindakan khusus sebagai argumen.Intent customBroadcastIntent = new Intent(ACTION_CUSTOM_BROADCAST);
- Kirimkan siaran menggunakan kelas LocalBroadcastManager:
LocalBroadcastManager.getInstance(this).sendBroadcast(customBroadcastIntent);
2.4 Register your Custom Broadcast
Jika Anda mendaftarkan penerima siaran secara terprogram, Anda harus berhenti mendaftarkan penerima tersebut ketika tidak diperlukan lagi. Dalam aplikasi, penerima hanya perlu merespons ke siaran khusus saat aplikasi dijalankan agar kita bisa mendaftarkan tindakan tersebut dalam onCreate()
dan berhenti mendaftarkannya di onDestroy()
.
- Buat variabel anggota di MainActivity untuk Penerima dan inisialisasi member tersebut:
private CustomReceiver mReceiver = new CustomReceiver();
- Dalam
onCreate()
, dapatkan instanceLocalBroadcastManager
dan daftarkan penerima dengan tindakan intent khusus:LocalBroadcastManager.getInstance(this) .registerReceiver(mReceiver, new IntentFilter(ACTION_CUSTOM_BROADCAST));
- Ganti metode
onDestroy()
dan berhenti mendaftarkan penerima dariLocalBroadcastManager
:@Override protected void onDestroy() { LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver); super.onDestroy(); }
2.5 Respond to the Custom Broadcast
- Dalam
onReceive()
kelas CustomReceiver, tambahkan pernyataan case untuk Tindakan Intent khusus. - Modifikasi pesan toast ke “Custom Broadcast Received”, ekstrak ke dalam strings.xml dan panggil
custom_broadcast_toast
(tekan Alt + Enter atau Option + Enter di Mac dan pilih extract string resource):case ACTION_CUSTOM_BROADCAST: toastMessage = context.getString(R.string.custom_broadcast_toast); break;