PAPB-C User Notification adalah pesan yang diterima oleh user yang tidak muncul dalam user interface utama tapi ada dalam bentuk icon dan dengan detail notifikasinya dalam notification area. Tujuan dari munculnya user notification adalah agar user tetap mengetahui event atau alert atau pesan yang masuk yang bisa user lihat kapan saja tanpa perlu keluar dari aplikasi yang sedang dibuka sekarang. Pada tutorial ini, kita akan membuat dua notifikasi yang berbeda. Yang pertama notifikasi dengan view normal menggunakan explicit intent dan yang kedua dengan view besar menggunakan implicit intent. Yang harus dipersiapkan: 1. Eclipse 2. AVD/GenieMotion 3. JDK 1.7 1. Membuat Android Application Project Baru Buka Eclipse IDE. Klik File – New – Project – Android Application Project. Isi nama aplikasi, project, packagenya, dll. Klik Next. Untuk window berikutnya pilih Next saja karena digunakan pengaturan default.
Julian Sitoajie Satrio - 115060807111132
PAPB-C
Julian Sitoajie Satrio - 115060807111132
PAPB-C
Julian Sitoajie Satrio - 115060807111132
PAPB-C 2. Membuat Layout pada Main Activity Untuk membuat dua tipe notifikasi yang berbeda, kita membutuhkan dua tombol yang masing-masing berbeda fungsi. Buka file res/layout/activity_main.xml lalu paste kode berikut:
<Button android:id="@+id/notificationOne" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Munculkan Notifikasi Satu" /> <Button android:id="@+id/notificationTwo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginTop="60dp" android:text="Munculkan Notifikasi Dua" />
3. Mengisi code pada Main Activity Untuk membuat layout dan mengontrol action dari notifikasi digunakan objek NotificationCompat.Builder. Setiap objek Notification harus mempunyai:
Icon kecil Judul Notifikasi Teks detail
Untuk itu perlu diset setSmallIcon(), setContentTitle(), dan setContentText(). Masih banyak juga layout content yang bisa digunakan di notifikasi, namun sifatnya opsional. Untuk tampilan notifikasi besar atau Big View Notification, kecuali konten dari view normal, harus ditambahkan Builder.setStyle(). Action notifikasi menghubungkan notifikasi dengan aktivitas dalam aplikasi, saat user mengklik notifikasi itu. Notifikasi itu bisa menyediakan beberapa action, tapi minimal satu yang harus ditambahkan, walau pun itu opsional. Untuk mendefinisikan action, kita menggunakan PentingIntent, yang berisi Intent yang memulai aktivitas pada Aplikasi.
Julian Sitoajie Satrio - 115060807111132
PAPB-C Pada aplikasi yang kita buat, pertama Explicit Intent, akan digunakan method cancel(notificationId) jadi notifikasi akan hilang saat aktivitas ditampilkan. Yang kedua adalah Implicit Intent, digunakan method setAutoCancel() yang akan berfungsi saat user mengklik notifikasi. Buka file src/papb.notificationtest/MainActivity.java dan paste kode berikut ini. package papb.notificationtest; import import import import import import import import import import import
android.net.Uri; android.os.Bundle; android.app.Activity; android.app.NotificationManager; android.app.PendingIntent; android.app.TaskStackBuilder; android.content.Context; android.content.Intent; android.support.v4.app.NotificationCompat; android.view.View; android.widget.Button;
public class MainActivity extends Activity { private NotificationManager myNotificationManager; private int notificationIdOne = 111; private int notificationIdTwo = 112; private int numMessagesOne = 0; private int numMessagesTwo = 0; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button notOneBtn = (Button) findViewById(R.id.notificationOne); notOneBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { displayNotificationOne(); } }); Button notTwoBtn = (Button) findViewById(R.id.notificationTwo); notTwoBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { displayNotificationTwo(); } }); } protected void displayNotificationOne() { // Invoking the default notification service NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); mBuilder.setContentTitle("Pesan baru"); mBuilder.setContentText("klik untuk melihat pesan"); mBuilder.setTicker("Explicit: Menerima Pesan Baru!");
Julian Sitoajie Satrio - 115060807111132
PAPB-C mBuilder.setSmallIcon(R.drawable.ic_launcher); // Increase notification number every time a new notification arrives mBuilder.setNumber(++numMessagesOne); // Creates an explicit intent for an Activity in your app Intent resultIntent = new Intent(this, NotificationOne.class); resultIntent.putExtra("notificationId", notificationIdOne); //This ensures that navigating backward from the Activity leads out of the app to Home page TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); // Adds the back stack for the Intent stackBuilder.addParentStack(NotificationOne.class); // Adds the Intent that starts the Activity to the top of the stack stackBuilder.addNextIntent(resultIntent); PendingIntent resultPendingIntent = stackBuilder.getPendingIntent( 0, PendingIntent.FLAG_ONE_SHOT //can only be used once ); // start the activity when the user clicks the notification text mBuilder.setContentIntent(resultPendingIntent); myNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // pass the Notification object to the system myNotificationManager.notify(notificationIdOne, mBuilder.build()); } protected void displayNotificationTwo() { // Invoking the default notification service NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); mBuilder.setContentTitle("Pesan Baru!"); mBuilder.setContentText("Klik untuk melihat pesan"); mBuilder.setTicker("Implicit: Menerima Pesan Baru!"); mBuilder.setSmallIcon(R.drawable.ic_launcher); NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); String[] events events[0] = new events[1] = new events[2] = new
= new String[3]; String("1) Pesan implisit intent"); String("2) Notifikasi besar"); String("3) Julian - 115060807111132");
// Sets a title for the Inbox style big view inboxStyle.setBigContentTitle("More Details:"); // Moves events into the big view for (int i=0; i < events.length; i++) { inboxStyle.addLine(events[i]); }
Julian Sitoajie Satrio - 115060807111132
PAPB-C mBuilder.setStyle(inboxStyle); // Increase notification number every time a new notification arrives mBuilder.setNumber(++numMessagesTwo); // When the user presses the notification, it is auto-removed mBuilder.setAutoCancel(true); // Creates an implicit intent Intent resultIntent = new Intent("com.example.javacodegeeks.TEL_INTENT", Uri.parse("tel:115060807111132")); resultIntent.putExtra("from", "javacodegeeks"); TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); stackBuilder.addParentStack(NotificationTwo.class); stackBuilder.addNextIntent(resultIntent); PendingIntent resultPendingIntent = stackBuilder.getPendingIntent( 0, PendingIntent.FLAG_ONE_SHOT ); mBuilder.setContentIntent(resultPendingIntent); myNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); myNotificationManager.notify(notificationIdTwo, mBuilder.build()); } }
4. Membuat Activity dari Action Notifikasi Kita ingin membuat aktivitas dari notifikasi, yang akan dimulai saat user mengklik notifikasi. Di sini kita akan membuat dua aktivitas berbeda untuk setiap notifikasi, jadi kita harus mebuat file berbeda. Untuk file pertama yang memakai explicit intent, klik kanan pada package src/papb.notificationtest/ New – Class. Isi nama dari Class dan tekan Finish.
Julian Sitoajie Satrio - 115060807111132
PAPB-C
Buka src/papb.notificationtest/NotificationOne.java dan paste kode berikut. NotificationOne.java: package papb.notificationtest; import android.os.Bundle; import android.widget.TextView; import android.app.Activity; import android.app.NotificationManager; import android.content.Context; public class NotificationOne extends Activity { @Override public void onCreate(Bundle savedInstanceState) {
Julian Sitoajie Satrio - 115060807111132
PAPB-C super.onCreate(savedInstanceState); setContentView(R.layout.notification_one); CharSequence s = "Isi notifikasi satu "; int id=0; Bundle extras = getIntent().getExtras(); if (extras == null) { s = "error"; } else { id = extras.getInt("notificationId"); } TextView t = (TextView) findViewById(R.id.text1); s = s+"adalah = "+id; t.setText(s); NotificationManager myNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // remove the notification with the specific id myNotificationManager.cancel(id); } } Untuk Implicit Intent, kita akan memakai prosedur yang sama seperti diatas untuk membuat Class. Klik kanan package src/papb.notificationtest – New – Class. Isi nama kelas dan tekan finish. Untuk Class kedua bisa dinamakan NotificationTwo.java. Sekarang, buka dan src/papb.notificationtest/NotificationTwo.java dan paste kode berikut. NotificationTwo.java: package papb.notificationtest; import android.app.Activity; import android.net.Uri; import android.os.Bundle; import android.widget.TextView; public class NotificationTwo extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
Julian Sitoajie Satrio - 115060807111132
PAPB-C setContentView(R.layout.notification_two); String output = "Isi notifikasi dua adalah "; TextView dataIntent = (TextView) findViewById(R.id.text2); // take the data and the extras of the intent Uri url = getIntent().getData(); Bundle extras = getIntent().getExtras(); output = output + url.toString(); // if there are extras, add them to the output string if(extras != null){ output = output + " from " +extras.getString("from"); } dataIntent.setText(output); } } Pada kode diatas kita tidak usah melakukan apa-apa untuk meng-cancel notifikasi karena kita sudah dilakukan pada fungsi displayNotificationTwo() pada file MainActivity.java, dengan method setAutocancel(). 5. Membuat Layout dari Action Notifikasi Selanjutnya, kita perlu membuat layout yang akan ditampilkan saat aktivitas dari setiap notifikasi mulai berjalan. Untuk NotificationOne.java kita akan menggunakan layout notification_one seperti yang didefinisikan pada file. Untuk membuatnya, klik kanan pada res/layout – New – Android XML File. Isi nama dan pilih linear layout sebagai root element.
Julian Sitoajie Satrio - 115060807111132
PAPB-C
Lalu buka file res/layout/notification_one.xml pada xml tab dan paste kode berikut. Notification_one.xml
Dengan cara yang sama, buatlah layout untuk file notification_two.java. Setelah itu buka file res/layout/notification_two.xml pada xml tab dan paste kode berikut. Notification_two.xml
Julian Sitoajie Satrio - 115060807111132
PAPB-C android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" >
6. Mendefinisikan Rules untuk Notification Activity Pada step ini kita akan menggunakan elemen <meta-data>, yang bertujuan untuk mendefinisikan parent dari aktivitas NotificationOne dan NotificationTwo. Element <meta-data> merupakan data tambahan, yang mana bisa menyediakan komponen parent. Jadi kita akan mengisi elemen ini dengan value yang sesuai. Karenanya, kita akan menaruh android.support.PARENT_ACTIVITY ke dalam android:name, dan dalam android:value kita akan menaruh nama dari aktivitas parent. Kita juga harus mendefinisikan rules untuk Implicit Intent yang kita gunakan dalam element aktivitas yang sesuai. Buka file AndroidManifest.xml dan pilih tab xml. Kemudian paste kode berikut. AndroidManifest.xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="papb.notificationtest" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="17" android:targetSdkVersion="19" />
<meta-data android:name="android.support.PARENT_ACTIVITY"
Julian Sitoajie Satrio - 115060807111132
PAPB-C android:value=".MainActivity"/> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity"/>
7. Menjalankan Aplikasi Jika kalian dapat mengikuti step-stepnya dari awal sampai akhir tanpa ada error. Congrats! Aplikasi siap dijalankan! Untuk menjalankan aplikasi kita, klik kanan pada project kita – Run As – Android Application. Saat kita menekan tombol “Munculkan Notifikasi Satu”, notifikasi baru akan dibuat dan muncul ticker notifikasi.
Kalo kita men-drag bagian atas layar dan pergi ke notification drawer, kita akan melihat tampilan normal dari notification seperti yang ditunjukkan gambar di bawah ini.
Julian Sitoajie Satrio - 115060807111132
PAPB-C
Jika user menekan notifikasi, maka activity NotificationOne akan dipanggil dan notifikasi akan dihilangkan dari notification bar. Di sana juga ada tombol untuk kembali ke MainActivity.
Sekarang, tekan tombol “Munculkan Notifikasi Dua” makan notifikasi yang akan muncul seperti gambar di bawah ini.
Jika kita menekannya, notifikasi akan dihilangkan karena method setAutoCancel dan Activity NotificationTwo akan dipanggil.
Julian Sitoajie Satrio - 115060807111132
PAPB-C
Julian Sitoajie Satrio - 115060807111132