Tutorial Android Mengenal Service Bagian 2

Setelah memahami tutorial Belajar Android Mengenal Service Bagian 1 mari kita melangkah kebagian yang lebih seru dalam penggunaan service ini, topiknya kali ini adalah memanfaatkan service untuk proses yang memakan waktu lama, misalnya mendownload file.

Oke kita mulai saja

1. Buka kembali project LearnService

2. Edit File Class TheService lalu ketikan kodenya seperti dibawah ini.

package net.agusharyanto.learnservice;

import java.net.MalformedURLException;
import java.net.URL;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;

public class TheService extends Service {
	@Override
	public IBinder onBind(Intent arg0) {
		return null;
	}

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		// We want this service to continue running until it is explicitly
		// stopped, so return sticky.
		// Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
		try {
			int result = DownloadFile(new URL(
					"http://agusharyanto.net/hadiah.pdf"));
			Toast.makeText(getBaseContext(), "Downloaded " + result + " bytes",
					Toast.LENGTH_LONG).show();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return START_STICKY;
	}

	private int DownloadFile(URL url) {
		try {
			// ---simulate taking some time to download a file---
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		// ---return an arbitrary number representing
		// the size of the file downloaded---
		return 100;
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		Toast.makeText(this, "The Service Destroyed", Toast.LENGTH_LONG).show();
	}
}

3. Tambahkan Permision Internet pada AndroidManifest.xml

<uses-permission android:name=“android.permission.INTERNET”></uses-permission>

4. Sekarang mari kita jalankan programnya.

Lho Kok 100 bytes pak, padahalkan filenya 53kb. Hehe jelas bang, kan memang kita belum melakukan pemanggilan ke server.

Nah untuk yang ada kaitannya dengan komunikasi dengan server kita dianjurkan untuk menggunakan AssynchTask.

4. Ubah kembali class TheService lalu rubah codenya mejadi seperti ini.

package net.agusharyanto.learnservice;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import android.app.Service;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

public class TheService extends Service {
	@Override
	public IBinder onBind(Intent arg0) {
		return null;
	}

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		// We want this service to continue running until it is explicitly
		// stopped, so return sticky.
		// Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
		try {
			new DoBackgroundTask().execute(new URL(
					"http://agusharyanto.net/android/dl/sylabus1.pdf"),
					new URL("http://agusharyanto.net/android/dl/sylabus2.pdf"),
					new URL("http://agusharyanto.net/android/dl/sylabus3.pdf"),
					new URL("http://agusharyanto.net/android/dl/sylabus4.pdf"));
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return START_STICKY;
	}

	private int DownloadFile(URL url) {
		int file_size = 0;
		try {
			// ---simulate taking some time to download a file---
			URLConnection urlConnection = url.openConnection();
			urlConnection.connect();
			file_size = urlConnection.getContentLength();
		} catch (IOException e) {
			e.printStackTrace();
		}
		// ---return an arbitrary number representing
		// the size of the file downloaded---
		return file_size;
	}

	private class DoBackgroundTask extends AsyncTask<URL, Integer, Long> {
		protected Long doInBackground(URL... urls) {
			int count = urls.length;
			long totalBytesDownloaded = 0;
			for (int i = 0; i < count; i++) {
				totalBytesDownloaded += DownloadFile(urls[i]);
				// ---calculate percentage downloaded and
				// report its progress---
				publishProgress((int) (((i + 1) / (float) count) * 100));
			}
			return totalBytesDownloaded;
		}

		protected void onProgressUpdate(Integer... progress) {
			Log.d("Downloading files", String.valueOf(progress[0])
					+ "% downloaded");
			Toast.makeText(getBaseContext(),
					String.valueOf(progress[0]) + "% downloaded",
					Toast.LENGTH_LONG).show();
		}

		protected void onPostExecute(Long result) {
			Toast.makeText(getBaseContext(), "Downloaded " + result + " bytes",
					Toast.LENGTH_LONG).show();
			stopSelf();
		}
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		Toast.makeText(this, "The Service Destroyed", Toast.LENGTH_LONG).show();
	}
}

5. Sekarang mari kita jalankan kembali


Pada kode diatas ketika tombol Start Service ditap, maka service akan mengeksekusi perintah yang ada dalam method onStartCommand yang akan mendowload 4 file disini disimulaikan setiap 1 file selesai akan menambah progress 25% dan setelah selesai dihitung total bytes yang di download dan mengeksekusi perintah stopSelf() yang akan mematikan Service.

Kalau bisa begini jadi ada Ide buat Aplikasi Lagu Anak. Tadinya mikir kalau buat aplikasi lagu itu akan besar filenya dan ini akan membuat User ragu untuk downlaodya, tapi dengan adanya proses seperti ini saya bisa buat playernya saja lalu untuk file mp3nya didownload pada saat user menjalankan aplikasi. Tapi jangan lupayah kalau semua file sudah di download, ketika user membuka aplikasi kembali service tidak boleh jalan lagi, untuk menangani ini bisa gunakan Shared Preference. Masih ada lanjutan dari pengenalan Android Service ini, nantikan tutorial android service bagian 3.

Setelah saya posting artikel Belajar Android Mengenal Service Bagian 1, iseng-iseng saya buka google lalu saya ketikan keyword Belajar Android Service Wow  hasilnya Rangking 1 di hasil google searchnya.

sumber:
Beginning Android 4 Application Development – Wei Meng-Lee

Semoga Bermanfaat

Salam Hangat

Agus Haryanto

Pembicara Seminar IT

Mobile and Web Application Developer

7 comments to Tutorial Android Mengenal Service Bagian 2

  • imam nur

    Tetap jadi yang pertama om Agus.. 🙂
    Inspirator bagi para developer baru seperti saya.. :p

  • masiano

    salam kenal pak agus,
    saya masih belum mengerti tentang konsep dari service tersebut. apakah service sendiri sama dengan thread atau berbeda cara kerjanya? mohon dibantu, terimakasih 😀

  • Agus Haryanto

    @masiano, Service itu komponen Android sedangkan Thread itu Fiturnya java. Kalau contoh nyata yang gamapang untuk pemanfaatan service ini adalah Aplikasi radio streaming. Nah tentunya disini tantangannya bagaiman radio tetatp terdengar walaupun aplikasi sudah ditutup.

  • masiano

    oke, dimengerti. terimakasih penjelasannya pak agus, sukses terus 🙂

  • Salam kenal mas agus…yang saya ingin tanyakan ini file hasil downlodnya di simpapan kemana?
    bisa gak langsung di simpan di SDcard?apa cuma process pada saat aplikasi di jalankan aja (gak nge save ke storage)?

  • Agus Haryanto

    @Fauzy, kalau ditutorial ini hanya konsep saja. untuk save ke SDCARD tentu bisa

  • Makasih pak atas tutorialnya, sangat berguna bagi saya 🙂

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>