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.





Rabu, 08 Oktober 2014

Program Sederhana Android



Tutorial Program Sederhana Android

v  KASUS
Pada kesempatan kali ini saya akan menulis tentang “tutorial program sederhana Android” . Programming native Android tidaklah sulit saya yakin semuanya bisa “ngoding android” asalkan ada kemauan disana.Baik, Sebelum saya menjelaskan tutorialnya, Saya akan menjelaskan output program.Tenang aja kawan gak ribet kok , namanya aja “program sederhana”.Jadi program akan menampilkan nim ketika user mencoba untuk menekan tombol show.
Output Program:

1.       Tampilan output yang diharapkan

(a)

(b)
 
 
Gambar a merupakan tampilan awal program dibuat.Program akan menampilkan NIM setelah user menekan tombol show sebagaimana gambar b.
Nah itulah program kali ini yang akan kita buat. Simple banget bukan !!

  • SOURCE CODE


MainActivity.java
public TextView nimView,keteranganView;
       public Button triggerNim;
      
       @Override
       protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);

              triggerNim = (Button)findViewById(R.id.nimButton);
        nimView = (TextView)findViewById(R.id.nimView);
        keteranganView = (TextView)findViewById(R.id.keteranganView);
       
        //Trigger button nim
        triggerNim.setOnClickListener(new OnClickListener() {
                    
                     public void onClick(View arg0) {
                           // TODO Auto-generated method stub
                          
                           try {
                                  String nim = "115060800111047";
                                  nimView.setText(nim);
                           } catch (Exception e) {
                                  // TODO: handle exception
                           }
                          
                     }
              } );
       
       }

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.simple_program_1.MainActivity" >

    <TextView
        android:id="@+id/keteranganView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="46dp"
        android:text="Nim Anda"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <Button
        android:id="@+id/nimButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/keteranganView"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="24dp"
        android:text="SHOW" />

    <TextView
        android:id="@+id/nimView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/nimButton"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="19dp"
        android:text="tes"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</RelativeLayout>




  • Tutorial & Screenshot
Pada tutorial ini saya menggunakan
1.       Editor Eclipse
2.       GenyMotions

Kenapa saya menggunakan Eclipse karena dosen saya merekomendasikan menggunakan eclipse.Saya lain kali akan menulis kelebihan dan kekurangan Eclipse yahh.Kemudian Genymotion saya gunakan sebagai Android Virtual Device, kenapa saya tidak menggunakan AVD ? Genymotion menurut pengalaman saya lebih ringan dari pada AVD.Baik kita langsung pada intinya bagaimana membuat Program Android diatas.

1.       Membuat Project Android baru. (File->New->Project….)
2.       Memilih project Android

3.       Mengisi nama Activity,Project Name, Package Name. Perlu diketahui untuk nama Project,Activity,dan Package tidak boleh menggunakan karakter spasi.


4.       Next

5.       Memilih icon project

6.       Pilih blank Activity

7.       Mengisi nama Activity serta nama file xml yang digunakan.

8.       Project Android dengan nama simple_program_1

9.       Menambahkan text view pada file xml, cukup dengan drag and drop textview ke xml gui.

10.   Menambahkan button pada file xml, cukup dengan drag and drop button ke xml gui.


11.   Silahkan tambahkan textview dibawah button show sebagai textview untuk menampilkan nim.
12.   Setelah kita membuat layoutnya dengan mengedit file xmlnya. Barulah kita membuat program intinya (.java)

Penjelasan sourcode diatas
  1. Line 16 dan 17 pendefinisian nimView,keteranganView dengan tipe TextView. Sedangkan triggerNim didefinisikan sebagai variable bertipe Button.
  2. Line 22 kenapa setContentView(R.layout.activity_main) didefinisikan ?. Karena saat ini kita menggunakan metode pembuatan layout program dengan file .xml.
  3. Line 24 variabel triggerView merefrensikan button pada activity_main.xml yg ber-Id nimButton
  4. Line 25 variabel nimView merefrensikan textView pada activity_main.xml yg ber-Id nimView.
  5. Line 26 variabel triggerView merefrensikan textView pada activity_main.xml yg ber-Id keteranganView
  6. Line 29-42 merupakan penanganan jika button triggerNim di tekan maka secara otomatis program akan menjalankan line 32-40 secara otomatis.
  7. Line 36 digunakan untuk mengeset text nimView dengan string nim yang bernilai “115060800111047”.



13.   Setelah itu run program diatas


 14.   Done