Tutorial
membuat User Notification
v Aplikasi
: Need For Health
Need For Health merupakan aplikasi android yang bertujuan
untuk meningkatkan minat manusia untuk memenuhi batas normal jumlah air pada
tubuh manusia. Aplikasi ini bekerja dengan memberikan notifikasi kepada user
tiap jam. Notifikasi terebut berupa himbauan untuk meminum air 1 gelas tiap jam
sesuai dengan anjuran ahli kesehatan.
v Source
Code :
|
MainActivity.java
|
|
package
com.example.needforhealthy;
import
android.support.v7.app.ActionBarActivity;
import
android.app.AlarmManager;
import
android.app.PendingIntent;
import
android.content.Context;
import
android.content.Intent;
import
android.os.Bundle;
import
android.view.Menu;
import
android.view.MenuItem;
import
android.view.View;
import android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.CheckBox;
import
android.widget.RadioButton;
import
android.widget.RadioGroup;
import
android.widget.TextView;
import
android.widget.Toast;
public class
MainActivity extends ActionBarActivity implements OnClickListener {
public Button startButton,stopButton;
Intent intent;
PendingIntent pintent;
AlarmManager alarm;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setContentView(R.layout.activity_main);
intent = new
Intent(MainActivity.this, HealtyService.class);
pintent =
PendingIntent.getService(MainActivity.this, 0, intent, 0);
alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
startButton =
(Button)findViewById(R.id.buttonStart);
stopButton =
(Button)findViewById(R.id.buttonStop);
startButton.setOnClickListener(this);
stopButton.setOnClickListener(this);
//startButton.setOnClickListener(l);
}
@Override
public boolean onCreateOptionsMenu(Menu
menu) {
// Inflate the menu; this adds
items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main,
menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem
item) {
// Handle action bar item clicks
here. The action bar will
// automatically handle clicks on
the Home/Up button, so long
// as you specify a parent activity
in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return
super.onOptionsItemSelected(item);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.buttonStart:
alarm.setRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(), 6*1000, pintent);
startButton.setEnabled(false);
stopButton.setEnabled(true);
break;
case R.id.buttonStop:
alarm.cancel(pintent);
startButton.setEnabled(true);
stopButton.setEnabled(false);
break;
}
}
}
|
|
HealtyService.java
|
|
package
com.example.needforhealthy;
import
java.text.DateFormat;
import
java.text.SimpleDateFormat;
import
java.util.Calendar;
import
java.util.Date;
import
java.util.Timer;
import
java.util.TimerTask;
import
java.util.concurrent.TimeUnit;
import
android.app.Notification;
import
android.app.PendingIntent;
import
android.app.Service;
import
android.content.Intent;
import
android.media.RingtoneManager;
import
android.net.Uri;
import
android.os.IBinder;
import
android.support.v4.app.NotificationCompat;
import
android.widget.Toast;
public class
HealtyService extends Service {
water health;
private int mNotificationCount=0;
private Uri soundUri =
RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
public void onCreate() {
// TODO Auto-generated method stub
health = new water(26);
Toast.makeText(this, "My
Service Created", Toast.LENGTH_LONG).show();
}
public int onStartCommand(Intent intent,
int flags, int startId){
Intent in = new
Intent(getApplicationContext(),subHealthy.class);
//Date myDate = new Date();
DateFormat dateFormat = new
SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//get current date time with Calendar()
Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR, 1);
in.putExtra("myDate",
dateFormat.format(cal.getTime()));
PendingIntent pintent =
PendingIntent.getActivity(getApplicationContext(), 1,
in,
Intent.FLAG_ACTIVITY_NEW_TASK);
mNotificationCount++;
startForeground(1337,
createNotification(pintent));
Toast.makeText(this, "Time to
Drinking !!", Toast.LENGTH_LONG).show();
return START_STICKY;
}
@Override
public void onStart(Intent intent, int
startId) {
}
public Notification
createNotification(PendingIntent pintent){
Notification notification = new
NotificationCompat.Builder(
getApplicationContext())
.setContentTitle("Water Please
" + "("+mNotificationCount+")")
.setContentText("hello")
.setAutoCancel(true)
.setSound(soundUri)
.setContentIntent(pintent)
.setSmallIcon(R.drawable.ic_launcher)
.build();
return notification;
}
public void onDestroy(){
}
}
|
|
Subhealthy.java
|
|
package com.example.needforhealthy;
import java.util.Date;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class subHealthy extends Activity implements
OnClickListener {
private
Button closeButton;
private
TextView clockText,notifiText;
@Override
protected
void onCreate(Bundle savedInstanceState) {
//
TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.subhealthy);
closeButton
= (Button)findViewById(R.id.buttonClose);
clockText
=
(TextView)findViewById(R.id.textClock);
notifiText
= (TextView)findViewById(R.id.textNotif);
String
date = getIntent().getExtras().getString("myDate");
clockText.setText(date);
closeButton.setOnClickListener(this);
}
@Override
public
void onClick(View arg0) {
//
TODO Auto-generated method stub
if(arg0.getId()==R.id.buttonClose){
super.finish();
}
}
}
|
|
Main_activity.xml
|
|
<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="com.example.needforhealthy.MainActivity"
>
<Button
android:id="@+id/buttonStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="77dp"
android:text="START"
/>
<Button
android:id="@+id/buttonStop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/buttonStart"
android:layout_centerVertical="true"
android:text="STOP"
/>
</RelativeLayout>
|
|
SubHealthy.xml
|
|
<?xml version="1.0"
encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<Button
android:id="@+id/buttonClose"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="close"
/>
<TextView
android:id="@+id/textClock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/buttonClose"
android:layout_centerHorizontal="true"
android:layout_marginTop="75dp"
android:text="13 : 01 :
01"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
<TextView
android:id="@+id/textNotif"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/buttonClose"
android:layout_centerHorizontal="true"
android:layout_marginTop="32dp"
android:text="Your Next
drinking is at : "
android:textAppearance="?android:attr/textAppearanceLarge"
/>
</RelativeLayout>
|
Penejelasan :
1. Buatlah
project android
2. Lihat
pada sourcode MainActivity.java
Pada kode diatas berfungsi untuk
menginialisasi layout dan listener yang digunakan pada aplikasi.
3. Selanjutnya
pada fungsi OnClick
Source code diatas digunakan event
handler untuk tiap button. Button start dan stop
Jika button start ditekan maka akan
menjalankan Background Service secara berulang dengan memanfaatkan alarmManager
dan intent HealthyService.java.
Sedangkan jika button stop ditekan maka
akan alarm akan dihentikan sehingga servicenya akan berhenti juga.
4. Lihat
source code HealthyService.java
Nah pada class ini harus berfungsi
sebagai service. Jadi pada pendefinisian class HealthyService harus di-extend
ke Service. Sehingga menghasilkan onStartCommand() seperti diatas. Jika intent
pada class ini dijalankan melalui alarmManager diatas maka fungsi inilah yang
berulang sampai service tersebut di hentikan. Saya akan fokus menjelaskan
tentang user notification. Pada aplikasi ini saya menggunakan Notification dan
Toast.
Pada kode “Toast.MakeText(value1,value2,value3)”
fungsi tersebut digunakan untuk membuat Toast. Value1 isilah dengan this,
value2 berisi text yang termuat pada toast, dan value3 berisi waktu lamanya
toast tersebut muncul.
5. Fungsi
CreateNotification digunakan untuk membuat notification
Pada notification minimal harus terdapat 3 elemen
yang harus dimuat saat membuat notification baru yaitu, setSmallIcon(),
SetContentText(), dan setContentTitle().
Output :
Tampilan
utama untuk mulai notifikasi atau menghentikan notifikasi.
Aplikasi
telah dijalankan yang mana aplikasi akan memberikan notifikasi tiap satujam.
(time
to drinking merupakan Toast)
Notifikasi
muncul
Jika
user mengklik notifikasi diatas maka akan muncul informasi jadwal minum
selanjutnya.