Android-O: Bagaimana Menggunakan Notification Channels
() translation by (you can also view the original English article)



Google telah meluncurkan pratinjau pengembangan pertaama versi Android berikutnya, saat ini kodenya adalah Android O (mungkinkah Oreo?) Beberapa fitur menarik telah dirilis, dan salah satunya adalah Notification Channels. Dalam tutorial ini, kita akan mengeksplorasi fitur ini dan membuat aplikasi sederhana yang mendemostrasikan fungsionalitas yang disediakannya.
Apa Itu Notification Channels?
Kanal notifikasi (notification channels) memungkinkan kita sebagai pengembang aplikasi untuk mengelompokkan notifikasi berdasarkan grup-grup—channels—dan pengembang punya kemampuan untuk memodifikasi pengaturan notifikasi untuk keseluruhan kanal dalam satu waktu. Sebagai contoh, untuk tiap kanal, pengguna bisa sepenuhnya memblok semua notifikasi, mengabaikan tingkat kepentingan, atau mengizinkan tampilnya notification badge. Fitur baru ini sangat membantu dalam meningkatkan pengalaman pengguna suatu aplikasi.
Kita akan beajar tentang fitur ini dengan membuat aplikasi sederhana bernama "TutsplusAlerts" yang akan menyediakan dua kanal pemberitahuan: Android dan iOS. Pengguna akan menerima pemberitahuan dari salah satu kanal yang terpisah itu apabila ada artikel baru yang dikirimkan.
1. Pengaturan Awal Android O SDK
Untuk mulai menggunakan Android O API, pada saat artikel ini ditulis, Anda akan membutuhkan Android Studion 2.4 Canary yang sudah dipasang di komputer Anda.
Buka Android Studio 2.4 dan SDK Manager dengan mengklik Tools > Android > SDK Manager.
Lalu di tab SDK Platforms, centang Show Package Details. Di bawah Android O Preview, centang: Android SDK Platform O dan Google APIs Intel x86 Atom System Image (hanya disyaratkan untuk emulator).



Selajutnya buka tab SDK Tools dan pilih yang berikut ini:
- Android SDK Build-Tools 26.0.0 (rc1 atau yang lebih tinggi)
- Android SDK Platform-Tools 26.0.0 (rc1 atau yang lebih tinggi)
- Android Emulator 26.0.0
- Support Repository
Klik tombol OK untuk mengunduh semua komponen ini.
2. Buat Sebuah Android Studio Project
Di Android Studio, buat proyek baru yang bernama TutsplusAlert dengan activity kosong yang bernama MainActivity
.
3. Perbarui build.gradle
Buka file build.gradle di modul aplikasi dan perbarui compileSdkVersion, buildToolsVersion
dan targetSdkVersion
serta versi Support Library
.
1 |
android { |
2 |
compileSdkVersion "android-O" |
3 |
buildToolsVersion "26.0.0-rc1" |
4 |
|
5 |
defaultConfig { |
6 |
applicationId "com.chikeandroid.tutsplusalerts" |
7 |
minSdkVersion 'O' |
8 |
targetSdkVersion 'O' |
9 |
versionCode 1 |
10 |
versionName "1.0" |
11 |
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" |
12 |
}
|
13 |
...
|
14 |
}
|
15 |
|
16 |
dependencies { |
17 |
...
|
18 |
compile 'com.android.support:appcompat-v7:26.0.0-alpha1' |
19 |
...
|
20 |
}
|
Ingatlah untuk melakukan sinkronisasi proyek Anda setelah melakukan beberapa perubahan tersebut.
4. Buat Notification Channels
Buat kelas baru dan beri nama NotificationUtils
, memperluas ContextWrapper
.
1 |
import android.app.Notification; |
2 |
import android.app.NotificationChannel; |
3 |
import android.app.NotificationManager; |
4 |
import android.content.Context; |
5 |
import android.content.ContextWrapper; |
6 |
import android.graphics.Color; |
7 |
|
8 |
public class NotificationUtils extends ContextWrapper { |
9 |
|
10 |
private NotificationManager mManager; |
11 |
public static final String ANDROID_CHANNEL_ID = "com.chikeandroid.tutsplustalerts.ANDROID"; |
12 |
public static final String IOS_CHANNEL_ID = "com.chikeandroid.tutsplustalerts.IOS"; |
13 |
public static final String ANDROID_CHANNEL_NAME = "ANDROID CHANNEL"; |
14 |
public static final String IOS_CHANNEL_NAME = "IOS CHANNEL"; |
15 |
|
16 |
public NotificationUtils(Context base) { |
17 |
super(base); |
18 |
createChannels(); |
19 |
}
|
20 |
|
21 |
public void createChannels() { |
22 |
|
23 |
// create android channel
|
24 |
NotificationChannel androidChannel = new NotificationChannel(ANDROID_CHANNEL_ID, |
25 |
ANDROID_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT); |
26 |
// Sets whether notifications posted to this channel should display notification lights
|
27 |
androidChannel.enableLights(true); |
28 |
// Sets whether notification posted to this channel should vibrate.
|
29 |
androidChannel.enableVibration(true); |
30 |
// Sets the notification light color for notifications posted to this channel
|
31 |
androidChannel.setLightColor(Color.GREEN); |
32 |
// Sets whether notifications posted to this channel appear on the lockscreen or not
|
33 |
androidChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE); |
34 |
|
35 |
getManager().createNotificationChannel(androidChannel); |
36 |
|
37 |
// create ios channel
|
38 |
NotificationChannel iosChannel = new NotificationChannel(IOS_CHANNEL_ID, |
39 |
IOS_CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH); |
40 |
iosChannel.enableLights(true); |
41 |
iosChannel.enableVibration(true); |
42 |
iosChannel.setLightColor(Color.GRAY); |
43 |
iosChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC); |
44 |
getManager().createNotificationChannel(iosChannel); |
45 |
}
|
46 |
|
47 |
private NotificationManager getManager() { |
48 |
if (mManager == null) { |
49 |
mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); |
50 |
}
|
51 |
return mManager; |
52 |
}
|
53 |
}
|
Dalam kode di atas, kita membuat dua instance NotificationChannel
, memasukkan suatu id (yang harus unik dalam paket Anda), suatu nama channel, dan juga importance level dalam constructornya. Untuk tiap notification channel, kita mengaplikasikan karakteristik seperti suara, cahaya, vibrasi, dan suatu pemberitahuan untuk ditunjukkan di lock screen. Akhirnya, kita mendapatkan NotificationManager
dari sistem dan meregistrasi channelnya dengan memanggil metode createNotificationChannel()
, melewati channel yang telah kita buat.
Kita bisa membuat berbagai notification channel secara serentak dengan createNotificationChannels()
, memasukkan suatu list Java instance NotificationChannel
. Anda bisa mendapatkan semua notification channel untuk aplikasi dengan getNotificationChannels()
dan mendapatkan channel khusus dengan getNotificationChannel()
, hanya memasukkan channel id sebagai suatu argumen.
Importance Level (Tingkat Kepentingan)
Mulai dari Android O, tingkat prioritas tidak berlaku lagi untuk pemberitahuan individual. Alih-alih, Anda menentukan tingkat kepentingan ketika membuat suatu notification channel—yang berkisar dari NotificationManager.IMPORTANCE_NONE
ke NotificationManager.IMPORTANCE_HIGH
. Kita akan mengeset channel Android ke IMPORTANCE_DEFAULT
, sedangkan yang di iOS channel adalah IMPORTANCE_HIGH
.
Daftar lengkap opsi kepentingan (importance) yang ada adalah:
-
IMPORTANCE_MAX
: tidak dipakai -
IMPORTANCE_HIGH:
tampil di mana saja, membuat keributan dan muncul tiba-tiba.
-
IMPORTANCE_DEFAULT:
tampil di mana saja, membuat keributan, tetapi secara visual tidak mengganggu
-
IMPORTANCE_LOW
: tampil di mana saja, tetapi tidak mengganggu -
IMPORTANCE_MIN
: hanya tampil di bawah bayang-bayang, di balik lipatan. -
IMPORTANCE_NONE
: pemberitahuan yang tidak penting; tidak tampil dalam bayang-bayang
Semua pemberitahuan untuk suatu kanal akan diberi tingkat kepentingan yang sama.
5. Membuat Pemberitahuan dan Mengirimkannya ke Kanal
Kita akan membuat dua Notifications untuk masing-masing kanal kita di kelas NotificationUtils
yang kita buat. Kita akan menetapkan notifikasi mana yang harus dikirimkan ke suatu kanal dalam Notification.Builder
(Android API 25) constructor, yang kita masukkan ke dalam channel id sebagai argumen kedua.
1 |
// ...
|
2 |
public Notification.Builder getAndroidChannelNotification(String title, String body) { |
3 |
return new Notification.Builder(getApplicationContext(), ANDROID_CHANNEL_ID) |
4 |
.setContentTitle(title) |
5 |
.setContentText(body) |
6 |
.setSmallIcon(android.R.drawable.stat_notify_more) |
7 |
.setAutoCancel(true); |
8 |
}
|
9 |
|
10 |
public Notification.Builder getIosChannelNotification(String title, String body) { |
11 |
return new Notification.Builder(getApplicationContext(), IOS_CHANNEL_ID) |
12 |
.setContentTitle(title) |
13 |
.setContentText(body) |
14 |
.setSmallIcon(android.R.drawable.stat_notify_more) |
15 |
.setAutoCancel(true); |
16 |
}
|
17 |
//...
|
Waspadalah bahwa Notification.Builder()
juga memiliki suatu metodee id setter untuk notification channel id setter yang disebut setChannel(String channelId)
, jadi Anda bisa memilih untuk mengeset id notification channel baik di constructor maupun menggunakan metode setter.
6. Membuat Tata Letak XML
Sekarang kita telah memiliki pengaturan awal untuk membuat dan mengirimkan ke notification channel, mari membuat antarmuka tata letak XML untuk mengirimkan pesaan ke activity_main.xml.
1 |
<?xml version="1.0" encoding="utf-8"?>
|
2 |
<LinearLayout
|
3 |
xmlns:android="https://schemas.android.com/apk/res/android" |
4 |
xmlns:app="http://schemas.android.com/apk/res-auto" |
5 |
xmlns:tools="http://schemas.android.com/tools" |
6 |
android:id="@+id/activity_main" |
7 |
android:layout_width="match_parent" |
8 |
android:layout_height="match_parent" |
9 |
android:orientation="vertical" |
10 |
android:layout_margin="16dp" |
11 |
tools:context="com.chikeandroid.tutsplusalerts.MainActivity"> |
12 |
|
13 |
<LinearLayout
|
14 |
android:layout_width="match_parent" |
15 |
android:layout_height="wrap_content" |
16 |
android:orientation="vertical"> |
17 |
|
18 |
<TextView
|
19 |
android:layout_width="wrap_content" |
20 |
android:layout_height="wrap_content" |
21 |
android:text="Tuts+ Android Channel" |
22 |
android:layout_gravity="center_horizontal" |
23 |
android:textAppearance="@style/TextAppearance.AppCompat.Title"/> |
24 |
|
25 |
<EditText
|
26 |
android:id="@+id/et_android_title" |
27 |
android:layout_width="match_parent" |
28 |
android:layout_height="wrap_content" |
29 |
android:hint="Title"/> |
30 |
|
31 |
<EditText
|
32 |
android:id="@+id/et_android_author" |
33 |
android:layout_width="match_parent" |
34 |
android:layout_height="wrap_content" |
35 |
android:hint="Author"/> |
36 |
|
37 |
<Button
|
38 |
android:id="@+id/btn_send_android" |
39 |
android:layout_width="match_parent" |
40 |
android:layout_height="wrap_content" |
41 |
android:text="Send"/> |
42 |
</LinearLayout>
|
43 |
|
44 |
<LinearLayout
|
45 |
android:layout_width="match_parent" |
46 |
android:layout_height="wrap_content" |
47 |
android:orientation="vertical" |
48 |
android:layout_marginTop="20dp"> |
49 |
|
50 |
<TextView
|
51 |
android:layout_width="wrap_content" |
52 |
android:layout_height="wrap_content" |
53 |
android:text="Tuts+ IOS Channel" |
54 |
android:layout_gravity="center_horizontal" |
55 |
android:textAppearance="@style/TextAppearance.AppCompat.Title"/> |
56 |
|
57 |
<EditText
|
58 |
android:id="@+id/et_ios_title" |
59 |
android:layout_width="match_parent" |
60 |
android:layout_height="wrap_content" |
61 |
android:hint="Title" |
62 |
/>
|
63 |
|
64 |
<EditText
|
65 |
android:id="@+id/et_ios_author" |
66 |
android:layout_width="match_parent" |
67 |
android:layout_height="wrap_content" |
68 |
android:hint="Author"/> |
69 |
<Button
|
70 |
android:id="@+id/btn_send_ios" |
71 |
android:layout_width="match_parent" |
72 |
android:layout_height="wrap_content" |
73 |
android:text="Send"/> |
74 |
</LinearLayout>
|
75 |
|
76 |
</LinearLayout>
|
7. Mengirimkan Pemberitahuan ke Kanal
Mengirimkan ke Android Channel
Dalam bagian ini, kita akan menyunting MainActivity
supaya bisa mendapatkan judul dan penulis dari komponen EditText
dan mengirimnya ke Android channel. Kita mendapatkan Notification.Builder
untuk Android channel yang dibuat di NotificationUtils
, dan kemudian memberitahu NotificationManager
.
1 |
import android.app.Notification; |
2 |
import android.os.Bundle; |
3 |
import android.support.v7.app.AppCompatActivity; |
4 |
import android.text.TextUtils; |
5 |
import android.view.View; |
6 |
import android.widget.Button; |
7 |
import android.widget.EditText; |
8 |
|
9 |
public class MainActivity extends AppCompatActivity { |
10 |
|
11 |
private NotificationUtils mNotificationUtils; |
12 |
|
13 |
@Override
|
14 |
protected void onCreate(Bundle savedInstanceState) { |
15 |
super.onCreate(savedInstanceState); |
16 |
setContentView(R.layout.activity_main); |
17 |
|
18 |
mNotificationUtils = new NotificationUtils(this); |
19 |
|
20 |
final EditText editTextTitleAndroid = (EditText) findViewById(R.id.et_android_title); |
21 |
final EditText editTextAuthorAndroid = (EditText) findViewById(R.id.et_android_author); |
22 |
Button buttonAndroid = (Button) findViewById(R.id.btn_send_android); |
23 |
|
24 |
buttonAndroid.setOnClickListener(new View.OnClickListener() { |
25 |
@Override
|
26 |
public void onClick(View view) { |
27 |
String title = editTextTitleAndroid.getText().toString(); |
28 |
String author = editTextAuthorAndroid.getText().toString(); |
29 |
|
30 |
if(!TextUtils.isEmpty(title) && !TextUtils.isEmpty(author)) { |
31 |
Notification.Builder nb = mNotificationUtils. |
32 |
getAndroidChannelNotification(title, "By " + author); |
33 |
|
34 |
mNotificationUtils.getManager().notify(101, nb.build()); |
35 |
}
|
36 |
}
|
37 |
});
|
38 |
}
|
39 |
}
|
Di titik ini, jalankan aplikasinya dan masukkan judul dan penulisnya, lalu klik tombol send untuk menerima notifikasinya secara langsung.



Mengirimkan ke iOS Channel
Di sini kami akan mengirimkan ke kanal iOS. Kita akan mendapatkan Notification.Builder
untuk kanal iOS yang kami buat di NotificationUtils
kami dan kemudian memanggil metode notify()
di NotificationManager
.
1 |
@Override
|
2 |
protected void onCreate(Bundle savedInstanceState) { |
3 |
|
4 |
// ...
|
5 |
|
6 |
final EditText editTextTitleIos = (EditText) findViewById(R.id.et_ios_title); |
7 |
final EditText editTextAuthorIos = (EditText) findViewById(R.id.et_ios_author); |
8 |
Button buttonIos = (Button) findViewById(R.id.btn_send_ios); |
9 |
buttonIos.setOnClickListener(new View.OnClickListener() { |
10 |
@Override
|
11 |
public void onClick(View view) { |
12 |
String title = editTextTitleIos.getText().toString(); |
13 |
String author = editTextAuthorIos.getText().toString(); |
14 |
|
15 |
if(!TextUtils.isEmpty(title) && !TextUtils.isEmpty(author)) { |
16 |
Notification.Builder nb = mNotificationUtils |
17 |
.getIosChannelNotification(title, "By " + author); |
18 |
|
19 |
mNotificationUtils.getManager().notify(102, nb.build()); |
20 |
}
|
21 |
}
|
22 |
});
|
23 |
}
|
Jalankan aplikasinya lagi lalu masukkan judul serta penulis, kemudian klik tombol send untuk mengirimkan pemberitahuan secara langsung.



8. Pengaturan Notification Channel
Pada saat artikel ini ditulis, Anda tidak bisa secara terprogram mengubah konfigurasi pengaturan notification channel tertentu. Alih-alih, satu-satunya pilihan yang ada adalah pengguna membuka layar pengaturan notifikasi untuk aplikasi di pengaturan perangkat. Dari sana, pengguna bisa mengakses pengaturan pemberitahuan aplikasi untuk memodifikasi pengaturan seperti getar, suara, dsb.Pengguna bisa menavigasi ke pengaturan pemberitahuan aplikasi dengan salah satu dari cara di bawah ini:
- Tekan agak lama pemberitahuan di notification drawer (gambar kiri bawah).
- Settings > Apps & notifications > Notifications > kemudian memilih aplikasinya (gambar di sebelah kanan bawah ini).



Anda juga bisa mengirim pengguna ke pengaturan pemberitahuan channel langsung dari aplikasi Anda. Mari kita lihat bagaimana cara melakukannya untuk kanal Android. Direkomendasikan Anda melakukan ini dalam pengaturan aplikasi Anda untuk membuat pengguna mudah mengakses pilihan pemberitahuan ini.
Menyunting Tata Letak XML
Masukkan tombol lainnya yang akan mengirikan pengguna ke pengaturan pemberitahuan kanal.
1 |
<!--...-->
|
2 |
<Button
|
3 |
android:id="@+id/btn_android_notif_settings" |
4 |
android:layout_width="match_parent" |
5 |
android:layout_height="wrap_content" |
6 |
android:text="Notification Settings"/> |
7 |
<!--...-->
|
Menulis Kode Intent
Di sini kita membuat suatu intent dan memasukkannya ke action Settings—ACTION_CHANNEL_NOTIFICATION_SETTINGS
(API 25)—dan tambahkan sejumlah nilai ekstra: nama package aplikasi dan id channel. Terakhir, kita memulai pengaturan activity dengan intent.
1 |
// ...
|
2 |
@Override
|
3 |
protected void onCreate(Bundle savedInstanceState) { |
4 |
//...
|
5 |
Button buttonAndroidNotifSettings = (Button) findViewById(R.id.btn_android_notif_settings); |
6 |
buttonAndroidNotifSettings.setOnClickListener(new View.OnClickListener() { |
7 |
|
8 |
@Override
|
9 |
public void onClick(View view) { |
10 |
Intent i = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); |
11 |
i.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); |
12 |
i.putExtra(Settings.EXTRA_CHANNEL_ID, NotificationUtils.ANDROID_CHANNEL_ID); |
13 |
startActivity(i); |
14 |
}
|
15 |
});
|
16 |
}
|
17 |
//...
|
Jalankan aplikasinya dan klik pengaturan pemberitahuan (notification settings) untuk kanal Android.



Di pengaturan pemberitahuan channel, pengguna bisa menyunting pengaturan seperti mengaktifkan getar, mengubah importance, atau menampilkan suatu badge (jika didukung) untuk channelnya.
Jika Anda ingin membawa pelanggan ke pengaturan pemberitahuan umum untuk aplikasi Anda, itu juga bisa dilakukan dengan suatu Intent
:
1 |
Intent i = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS); |
2 |
i.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); |
3 |
startActivity(i); |
9. Buat Grup Pemberitahuan
Kita juga bisa mengelompokkan kanal-kanal pemberitahuan supaya bisa dikelola bersama. Hal ini bermanfaat untuk aplikasi yang mendukung banyak akun pengguna. Kanal pemberitahuan yang sama tersedia lintas akun-akun individual. Sebagai contoh, suatu aplikasi jaringan sosial mungkin mencakup untuk akun pengguna personal maupun bisnis. Kode di bawah ini menunjukkan Anda cara membuat grup notification channel:
1 |
String groupId = "group_id_101"; |
2 |
CharSequence groupName = "Channel Name"; |
3 |
NotificationManager mNotificationManager = |
4 |
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); |
5 |
mNotificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName)); |
Kami menggunakan metode NotificationManager
createNotificationChannelGroup()
, memasukkan suatu instance NotificationChannelGroup
ke dalamnya, yang membutuhkan id grup dann nama grup untuk membuat instance tersebut..
Sekalinya ini selesai, kita harus menyambungkan notification channel ke suatu grup dengan menggunakan metode NotificationChannel.setGroup()
dan memasukannya ke id grup. Jika Anda ingin membuat banyak grup pemberitahuan secara bersamaan, gunakan createNotificationChannelGroups()
, memasukkan list Java instance NotificationChannelGroup
.
10. Menghapus Suatu Notification Channel
Menghapus suatu notification channel cukup mudah jika tidak lagi dibutuhkan. Gunakan saja metode pengelola pemberitahuan deleteNotificationChannel()
dan masukkan channel idnya.
1 |
NotificationManager mNotificationManager = |
2 |
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); |
3 |
mNotificationManager.deleteNotificationChannel(IOS_CHANNEL_ID); |
Meskipun demikian, waspadilah bahwa channel yang dihapus tetap tampak di pengaturan pemberitahuan untuk mencegah spam.
Kesimpulan
Dalam tutorial ini, Anda belajar tentang Notification Channel untuk Android O: apa mereka dan bagaimana membuatnya, termasuk bagaimana mengirimkan pemberitahuan ke channel, bagaimana mengakses pengaturan pemberitahuan channel, bagaimana mengelompokkan notification channel, dan bagaimana menghapus suatu notification channel.
Untuk belajar lebih lanjut tentang Notification Channel, merujuklah ke dokumentasi resminya. Dan sementara waktu, pelajari sejumlah kursus dan tutorial kami yang lain tentang pengembangan aplikasi Android.
- Android SDKTips Cepat: Membuat Teks Autosizing Dengan Android OJessica Thornsby
- Android SDKMenulis Kode Aplikasi Android Galeri Gambar Dengan GlideChike Mgbemena
- Android SDKBagaimana Membuat Panggilan dan Menggunakan SMS di Aplikasi AndroidChike Mgbemena
- Android SDKMemulai Dengan RxJava 2 untuk AndroidJessica Thornsby