Kamis, 06 November 2014

Tutorial Notifikasi Android

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.