Post on 25-Apr-2019
PAPB-C
Julian Sitoajie Satrio - 115060807111132
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.
PAPB-C
Julian Sitoajie Satrio - 115060807111132
PAPB-C
Julian Sitoajie Satrio - 115060807111132
PAPB-C
Julian Sitoajie Satrio - 115060807111132
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:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="papb.notificationtest.MainActivity" >
<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" />
</RelativeLayout>
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.
PAPB-C
Julian Sitoajie Satrio - 115060807111132
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 android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.TaskStackBuilder;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import android.view.View;
import 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!");
PAPB-C
Julian Sitoajie Satrio - 115060807111132
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 = new String[3];
events[0] = new String("1) Pesan implisit intent");
events[1] = new String("2) Notifikasi besar");
events[2] = new 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]);
}
PAPB-C
Julian Sitoajie Satrio - 115060807111132
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.
PAPB-C
Julian Sitoajie Satrio - 115060807111132
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)
{
PAPB-C
Julian Sitoajie Satrio - 115060807111132
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);
PAPB-C
Julian Sitoajie Satrio - 115060807111132
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.
PAPB-C
Julian Sitoajie Satrio - 115060807111132
Lalu buka file res/layout/notification_one.xml pada xml tab dan paste kode berikut.
Notification_one.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/text1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
PAPB-C
Julian Sitoajie Satrio - 115060807111132
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/text2"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
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
<?xml version="1.0" encoding="utf-8"?>
<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" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="papb.notificationtest.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".NotificationOne"
android:label="Details of Notification One"
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
PAPB-C
Julian Sitoajie Satrio - 115060807111132
android:value=".MainActivity"/>
</activity>
<activity
android:name=".NotificationTwo"
android:label="Details of Notification Two"
android:parentActivityName=".MainActivity">
<intent-filter>
<action android:name="com.example.javacodegeeks.TEL_INTENT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity"/>
</activity>
</application>
</manifest>
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.
PAPB-C
Julian Sitoajie Satrio - 115060807111132
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.
PAPB-C
Julian Sitoajie Satrio - 115060807111132