• Tidak ada hasil yang ditemukan

PERTEMUAN KE 7 Broadcast Receiver dan Services

N/A
N/A
Protected

Academic year: 2021

Membagikan "PERTEMUAN KE 7 Broadcast Receiver dan Services"

Copied!
9
0
0

Teks penuh

(1)

PERTEMUAN KE – 7

Broadcast Receiver dan Services A. TUJUAN

Mahasiswa diharapkan dapat memahami dan mengetahui tentang Broadcast Receviver dan Service serta bagaimana menggunakannya.

B. TEORI SINGKAT BROADCAST RECEIVER

Broadcast Receiver adalah respon ke pesan broadcast dari aplikasi lain atau dari sistem itu sendiri. Pesan ini kadang-kadang disebut event atau intent. Sebagai contoh, aplikasi dapat juga menginisiasi broadcast untuk membiarkan aplikasi lain tahu bahwa beberapa data telah didownload ke device dan ada untuk digunakan, jadi ini adalah broadcast receiver yang akan menangkap komunikasi dan akan memulai aksi yang tepat.

Berikut adalah 2 langkah penting untuk membuat BroadcastReceiver bekerja

menciptakan the Broadcast Receiver.

Me-Register Broadcast Receiver Menciptakan broadcast receiver

Sebuah broadcast receiver diimplementasikan sebagai subclass dari kelas BroadcastReceiver dan mengoveride method onReceive() dimana setiap pesan yang diterima sebagai parameter obyek dari Intent.

public class MyReceiver extends BroadcastReceiver { @Override

public void onReceive(Context context, Intent intent) {

Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();

} }

Meregister BroadcastReceiver

Sebuah aplikasi mendengarkan broadcast intent secara spesifik dengan meregister sebuah broadcast receiver dalam file AndroidManifest.xml.

(2)

Berikut beberapa konstanta Event yang dapat digunakan.

Event Constant Keterangan

android.intent.action.BATTERY_CHANGED Broadcast yang terdiri dari keadaan charging, level, dan informasi lain tentang batery.

android.intent.action.BATTERY_LOW Mengindikasikan kondisi batery device lemah android.intent.action.BATTERY_OKAY Mengindikasikan batery sudah okay sesudah

lemah.

android.intent.action.BOOT_COMPLETED Ini sekali broadcast, sesudah sistem selesai booting.

android.intent.action.BUG_REPORT Memperlihatkan activity melakukan report bug.

android.intent.action.CALL Menyajikan panggilan ke nomer spesifik.

android.intent.action.CALL_BUTTON User menekan button "call" untuk menuju ke pemanggilan telepon.

android.intent.action.DATE_CHANGED Tanggal diubah.

android.intent.action.REBOOT Device reboot.

SERVICE

Service adalah komponen aplikasi yang merepresentasikan sebuah keiningan aplikasi untuk melakukan operasi running yang lebih panjang pada saat tidak berinteraksi dengan user atau untuk memasok fungsionalitas aplikasi lain untuk digunakan. Masing-masing service class harus mempunyai deklarasi <service> yang berhubungan di dalam paket AndroidManifest.xml. Service bisa dimulai dengan Context.startService() dan Context.

bindService(). Class IntentService bisa diperoleh sebagai sebuah implementasi standar yang mempunyai alurnya sendiri dimana dia menjadualkan pekerjaannya untuk diselesaikan.

Apa itu Service?

Sebuah Service adalah BUKAN proses yang terpisah. Obyek Service itu sendiri tidak berarti dia berjalan dalam prosesnya sendiri; kecuali ditentukan lain, aplikasi tersebut akan berjalan sama dengan aplikasi yang lain.

Sebuah Service BUKAN thread. Itu bukan berarti dia sendiri tidak melakukan pekerjaan dari thread utama (untuk mencegah kesalahan “Application Not Responding”)

Suatu fasilitas untuk aplikasi memberi tahu sistem tentang sesuatu yang ingin dikerjakan dalam background (juga saat user tidak secara langsung berinteraksi dengan aplikasi).

Ini berhubungan dengan pemanggilan ke Context.startService(), yang mana menjawab sistem untuk mengatur pekerjaan untuk service, akan berjalan sampai service atau seseorang secara eksplisit menghentikannya.

Sebuah fasilitas untuk sebuah aplikasi mengekspose beberapa dari fungsionalitasnya ke aplikasi yang lain. Ini berhubungan pada pemanggilan ke Context.bindService(), yang mana membiarkan sebuah koneksi long-standing untuk dibuat ke service untuk berinteraksi dengannya.

Ketika sebuah komponen Service dibuat, untuk alasan yang lain, semua sistem secara aktual menginstansiasi komponen dan memanggil onCreate() nya.

Service itu sangat sederhana, yang memberikan dua fitur utama:

Sebuah fasilitas bagi aplikasi untuk memberitahu sistem mengenai sesuatu yang akan dikerjakannya di latar belakang (bahkan pada saat user sedang secara tidak langsung berinteraksi dengan aplikasi). Ini berhubungan dengan panggilan ke Context.startService(), yang meminta sistem untuk menjadualkan pekerjaan untuk

(3)

service, untuk dikerjakan sampai service atau seseorang secara eksplisit menghentikannya.

Sebuah fasilitas bagi sebauh aplikasi untuk mengekspos beberapa dari fungsionalitas ke aplikasi lain. Hal ini berhubungan dengan panggilan ke Context.bindService(), yang mengijinkan sebuah hubungan yang panjang yang akan dibuat ke service untuk berinteraksi dengannya.

Ketika sebuah komponen Service benar-benar dibuat, yang benar-benar dilakukan oleh semua sistem adalah meng-instantiate komponen dan memanggil onCreate() nya dan melakukan callback yang sesuai di untaian utama. Terserah kepada Service itu sendiri untuk mengimplementasikan hal-hal ini dengan cara yang sesuai, misalnya membuat sebuah untaian sekunder dimana dia melakukan pekerjaannya.

C. PRAKTIK

1. Buat sebuah project baru 2. Buat layout sebagai berikut

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

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"

app:layout_behavior="@string/appbar_scrolling_view_behavior"

tools:context="com.example.lucianugraheni.trybroadcast.MainActivity"

tools:showIn="@layout/activity_main">

<TextView

android:id="@+id/textView1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Example of Broadcast"

android:layout_alignParentTop="true"

android:layout_centerHorizontal="true"

android:textSize="30dp" />

<TextView

android:id="@+id/textView2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Membuat Broadcast "

android:textColor="#ff87ff09"

android:textSize="30dp"

android:layout_above="@+id/imageButton"

android:layout_centerHorizontal="true"

android:layout_marginBottom="40dp" />

<ImageButton

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/imageButton"

android:src="@drawable/broadcast"

(4)

android:layout_centerVertical="true"

android:layout_centerHorizontal="true" />

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/button2"

android:text="Broadcast Intent"

android:onClick="broadcastIntent"

android:layout_below="@+id/imageButton"

android:layout_centerHorizontal="true" />

</RelativeLayout>

3. Tambahkan dalam file java-nya, menjadi (perhatikan pada package sesuaikan dengan paket yang anda buat)

package com.example.lucianugraheni.trybroadcast;

import android.content.Intent;

import android.os.Bundle;

import android.support.design.widget.FloatingActionButton;

import android.support.design.widget.Snackbar;

import android.support.v7.app.AppCompatActivity;

import android.support.v7.widget.Toolbar;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.Button;

public class MainActivity extends AppCompatActivity { Button butBatt;

@Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//mungkin ada bagian lain disini

butBatt = (Button) findViewById(R.id.button3);

}

// broadcast a custom intent.

public void broadcastIntent(View view){

Intent intent = new Intent();

intent.setAction("com.example.lucianugraheni.CUSTOM_INTENT");

sendBroadcast(intent);

}

//mungkin ada bagian lain disini }

4. Buat sebuah file java yang meng-extend broadcast receiver.

package com.example.lucianugraheni.trybroadcast;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.widget.Toast;

public class MyReceiver extends BroadcastReceiver {

(5)

@Override

public void onReceive(Context context, Intent intent) {

Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();

} }

5. Daftarkan pada ManifestAndroid.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.example.lucianugraheni.trybroadcast">

<application

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:supportsRtl="true"

android:theme="@style/AppTheme">

<activity

android:name=".MainActivity"

android:label="@string/app_name"

android:theme="@style/AppTheme.NoActionBar">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<receiver android:name="MyReceiver">

<intent-filter>

<action android:name="com.example.lucianugraheni.CUSTOM_INTENT">

</action>

</intent-filter>

</receiver>

</application>

</manifest>

6. Jalankan dan amati hasilnya.

7. Sekarang kita akan menambahkan Broadcast Receiver yang lain.

8. Tambahkan pada layout-nya sebuah Button.

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/button3"

android:text="Broadcast Baterry"

android:onClick="broadcastBatt"

android:layout_below="@+id/button2"

android:layout_centerHorizontal="true" />

9. Tambahkan dalam MainActivity

public void broadcastBatt(View view){

butBatt.setOnClickListener(new View.OnClickListener() { @Override

(6)

public void onClick(View arg0) {

Intent intent = new Intent(MainActivity.this, BaterryStatus.class);

startActivity(intent);

} });

10. Tambahkan sebuah layout dengan nama batt.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

<ProgressBar

android:id="@+id/bar"

style="?android:attr/progressBarStyleHorizontal"

android:layout_width="match_parent"

android:layout_height="wrap_content"/>

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

<TextView

android:id="@+id/level"

android:layout_width="0px"

android:layout_height="wrap_content"

android:layout_weight="1"

android:textSize="36sp"/>

<ImageView

android:id="@+id/status"

android:layout_width="0px"

android:layout_height="wrap_content"

android:layout_weight="1"/>

</LinearLayout>

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:text="Kembali ke halaman sebelumnya"

android:onClick="kembali"

android:id="@+id/butKembali"/>

</LinearLayout>

11. Tambahkan file java dengan nama BaterryStatus.java

package com.example.lucianugraheni.trybroadcast;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.DialogInterface;

import android.content.Intent;

import android.content.IntentFilter;

import android.net.Uri;

import android.os.BatteryManager;

import android.os.Bundle;

(7)

import android.support.v7.app.AlertDialog;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.ArrayAdapter;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.ProgressBar;

import android.widget.TextView;

public class BaterryStatus extends AppCompatActivity { private ProgressBar bar;

private ImageView status;

private TextView level;

private Button butKembali;

@Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.batt);

bar = (ProgressBar) findViewById(R.id.bar);

status = (ImageView) findViewById(R.id.status);

level = (TextView) findViewById(R.id.level);

registerReceiver(onBattery, new IntentFilter(

Intent.ACTION_BATTERY_CHANGED));

butKembali = (Button) findViewById(R.id.butKembali);

}

public void kembali(View view){

butKembali.setOnClickListener(new View.OnClickListener() { @Override

public void onClick(View arg0) {

Intent intent = new Intent(BaterryStatus.this, MainActivity.class);

startActivity(intent);

} });

}

BroadcastReceiver onBattery = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { int pct =

100 * intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 1) / intent.getIntExtra(BatteryManager.EXTRA_SCALE, 1);

bar.setProgress(pct);

level.setText(String.valueOf(pct));

switch (intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1)) { case BatteryManager.BATTERY_STATUS_CHARGING:

status.setImageResource(R.drawable.charging);

break;

case BatteryManager.BATTERY_STATUS_FULL:

int plugged =

intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);

if (plugged == BatteryManager.BATTERY_PLUGGED_AC

|| plugged == BatteryManager.BATTERY_PLUGGED_USB) { status.setImageResource(R.drawable.full);

} else {

status.setImageResource(R.drawable.unplugged);

} break;

default:

status.setImageResource(R.drawable.unplugged);

break;

}

(8)

} };

}

12. Dan tambahkan juga dalam AndroidManifest.xml , untuk mendaftarkan activity.

<activity

android:name=".BaterryStatus">

</activity>

13. Jalankan dan amati hasilnya.

14. Sekarang kita akan menambahkan Service.

15. Pertama kita membuat sebuah menu pada layout batt.xml dan BaterryStatus.java 16. Tambahkan pada layout batt.xml sebuah Button.

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Pilih Service"

android:layout_gravity="center"

android:id="@+id/btnService"/>

17. Deklarasikan variabel Button pada BaterryStatus.java dengan nama btnMenu, tambahkan pada deklarasi Button yang sudah ada.

18. Tambahkan pada method onCreate, sebagai berikut

final String[] option = {"Facebook", "Twitter", "Telpon", "Sms"};

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.select_dialog_item, option);

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setTitle("Select Option");

builder.setAdapter(adapter, new DialogInterface.OnClickListener() { @Override

public void onClick(DialogInterface dialogInterface, int i) { if (i == 0) {

Intent intfb = new Intent(Intent.ACTION_VIEW, Uri.parse("https://facebook.com"));

startActivity(intfb);

} else if (i == 1) {

Intent inttw = new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com"));

startActivity(inttw);

} else {

if (i == 2) {

Intent inttel = new Intent(Intent.ACTION_CALL, Uri.parse("tel:+628888999"));

startActivity(inttel);

} else {

Intent intsms = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:+6288889999"));

intsms.putExtra("sms_body", "Halo apa kabar");

startActivity(intsms);

} } } });

(9)

final AlertDialog a = builder.create();

btnMenu = (Button) findViewById(R.id.btnService);

btnMenu.setOnClickListener(new View.OnClickListener() { public void onClick(View v) {

a.show();

} });

19. Tambahkan pada AndroidManifest.xml dua buah permission, sebagai berikut

<uses-permission android:name="android.permission.CALL_PHONE"/>

<uses-permission android:name="android.permission.SEND_SMS"/>

20. Jalankan dan amati hasilnya.

D. LATIHAN

• Latihan diberikan oleh dosen pengampu pada saat praktikum.

• Dikerjakan di laboratorium pada jam praktikum.

E. TUGAS

• Tugas diberikan oleh dosen pengampu pada akhir praktikum.

• Dikerjakan di rumah dan dilampirkan pada laporan.

Referensi

Dokumen terkait