PEMROGRAMAN MOBILE 2 - stekom.ac.id
Transcript of PEMROGRAMAN MOBILE 2 - stekom.ac.id
DIKTAT
PEMROGRAMAN MOBILE 2
Oleh :
Rohmad Abidin, S.Kom, M.Kom
STEKOM SEMARANG
TAHUN 2018
KATA PENGANTAR
Puji syukur kehadirat Allah SWT atas segala rahmat-NYA sehingga Diktat
Pemrograman Mobile-2 ini dapat tersusun hingga selesai . Tidak lupa kami
juga mengucapkan banyak terimakasih atas bantuan dari pihak yang telah
berkontribusi dengan memberikan sumbangan baik materi maupun
pikirannya.
Harapan kami semoga diktat ini dapat menambah pengetahuan dan
pengalaman bagi para mahasiswa, Untuk ke depannya dapat memperbaiki
bentuk maupun menambah isi diktat agar menjadi lebih baik lagi.
Karena keterbatasan pengetahuan maupun pengalaman penyusun, Kami
yakin masih banyak kekurangan dalam diktat ini, Oleh karena itu penyusun
sangat mengharapkan saran dan kritik yang membangun dari pembaca demi
kesempurnaan diktat ini.
Semarang, April 2018
Penyusun
iii
DAFTAR ISI
HALAMAN JUDUL
KATA PENGANTAR
BAB I INTENT ................................................................................ 1
1.1 Panggil Activity ............................................................ 2
1.2 Share Data .................................................................... 5
1.3 Short Message Service ................................................. 7
BAB II SERVICE ........................................................................... 8
2.1 Background Service ...................................................... 8
2.2 Telepon Service ............................................................ 12
BAB III DATA STORAGE ............................................................ 15
3.1 Membaca data ponsel dan sim ..................................... 15
3.2 Shared preference ........................................................ 17
3.3 Internal dan External Storage ...................................... 21
3.4 Sqlite ............................................................................ 27
BAB IV ANDROID WEB ............................................................. 34
4.1 Link .............................................................................. 34
4.2 Web View ..................................................................... 36
BAB V LOCATION BASED SERVICE ........................................ 40
5.1 GPS ............................................................................... 40
5.2 Mendapatkan nilai Longitude dan Latitude .................. 41
5.3 Permintaan Alamat ....................................................... 42
5.4 Marker .......................................................................... 43
BAB VI ANDROID CLIENT SERVER ......................................... 45
6.1 Koneksi dan Jaringan ................................................... 45
6.2 JSON Format ................................................................ 48
6.3 Pertukaran Data Client-Server ...................................... 52
BAB VII PUBLIKASI APLIKASI .................................................. 58
7.1 Rilis Aplikasi ................................................................ 58
7.2 Distribusi Aplikasi ........................................................ 63
1
BAB I
INTENT
Tujuan Pembelajaran :
Setelah mempelajari ini materi intent mahasiswa dapat mengetahui dasar
mekanisme menjalankan dan bertukar data antara yang menjadi dasar
pengembangan aplikasi android.
Intent adalah sebuah mekanisme yang digunakan untuk menjalankan dan
bertukar data antara Activity satu dengan activity lainnya maupun
berinteraksi dengan berbagai komponen pada aplikasi android. Intent
merupakan inti dari sebuah aplikasi android. Sebuah intent dapat terdiri atas
berbagai aksi seperti view, edit, dial dan lain sebagainya.
Jenis intent :
a. Intent Eksplisit
Dalam intent Eksplisit, komponen yang harus dipanggil telah ditentukan
secara jelas.
Kode 1.1
Pada kode diatas, intent digunakan untuk membuat object panggil untuk
menjalankan ActivityKedua. Komponen yang akan dijalankan ditulis
secara jelas.
b. Intent Implisit
Intent Implisit tidak memiliki definisi yang jelas mengenai komponen
yang akan dijalankan, melainkan definisi “aksi yang akan dijalankan”.
Kode 1.2
Pada contoh diatas, browseIntent adalah Intent Implisit yang berguna
ketika ingin membuka halaman web http://www.stekom.ac.id melalui
aplikasi browser internet. Android akan menentukan komponen yang
yang akan menangani Intent tersebut berdasarkan informasi aksi,
kategori, data dan jenis MIME yang cocok.Untuk mengetahui komponen
mana yang cocok menggunakan Intent Filter pada AndroidManifest.xml.
Kode 1.3
Berikut ini beberapa pengaplikasian dari intent :
1.1 Panggil Activity
Normalnya setiap activity menampilkan satu buah user interface
kepada pengguna. Misalnya sebuah activity menampilkan daftar
3
menu minuman, kemudian pengguna dapat memilih satu jenis minuman.
Contoh lainnya pada aplikasi sms, dimana satu activity digunakan
untuk menulis pesan,activity berikutnya untuk menampilkan nomor
kontak tujuan, atau activity lainnya digunakan untuk menampilkan
pesan-pesan lama. Meskipun activity-activity diatas terdapat dalam
satu aplikasi sms, namun masing-masing activity berdiri sendiri.
Untuk pindah dari satu activity ke activity lainnya dapat
melakukan suatu event misalnya tombol diklik atau melalui trigger
tertentu.
Gambar : 1.1 Panggil Intent
Kode 1.4
<Button
android:id="@+id/bInfo"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:onClick="keInfo"
android:text="Informasi"/>
Kode 1.5
//mendaftarkan bInfo untuk diberikan aksi
Button btninfo = (Button) findViewById(R.id.bInfo);
//objek btninfo melakukan aksi saat di lakukan klik
btninfo.setOnClickListener(new View.OnClickListener() {
@Override
publicvoid onClick(View v) {
Intent info = newIntent(getApplicationContext(),
HalInfo.class);
startActivity(info);
}
});
Agar android dapat mengenali activity yang dimaksud maka activity
yangharusdidaftarkan pada AndroidManifest.xml jika tidak akan
terjadi force closepada aplikasi. Tambahkan listing kode berikut ini
pada AndroidManifest.xml
Kode 1.6
<activity android:name="HalInfo"
android:label="Info Pengembang">
<intent-filter>
<actionandroid:name="com.panggilactivity.HalInfo"/>
<categoryandroid:name="android.intent.category.DEFAULT"/>
5
</intent-filter>
</activity>
1.2 Sharing Data
Intent dapat digunakan untuk mengirim data dari satu activity ke activity
lainnya atau dari satu aplikasi ke aplikasi lainnya.
a) Share antar activity
Untuk mengirimkan data dalam satu aplikasi (antar activity)
menggunakan metode objekIntent.putExtra (“namavariabel”,data);
Sedangkan untuk mengambil nilai kiriman melalui Intent
menggunakan Bundle extras = getIntent().getExtras();
Kode 1.7
String username=”rohmad”;
String password=”qwerty”;
Intent i = newIntent(getApplicationContext(),
Login.class);
i.putExtra("user", username);
i.putExtra("pass", password);
startActivity(i);
Kode 1.8
String user=””;
String password=””;
Bundle extras = getIntent().getExtras();
if (extras != null) {
user = extras.getString("user");
password = extras.getString("pass");
}
Tugas 1.1 :
Buatlah layout untuk hal1.xml yang berisi EditText nama, alamat dan
nomor telpon kemudian hasilnya ditampilkan pada hal2.xml.
b) Share antar aplikasi
Intent dapat digunakan untuk membungkus data kemudian
membawa data tersebut ke aplikasi lain. Selanjutnya dapat diolah
lebih lanjut seperti pengiriman melalui media sosial atau sharing
data menggunakan Bluetooth.
Fungsi Intent untuk mengirimkan data adalah ACTION_SEND.
Sebelum data dikirimkan diperlukan pemilihan aplikasi yang akan di
gunakan untuk share data menggunakan fungsi createChooser().
Kode 1.9
Intent sharingData = newIntent(Intent.ACTION_SEND);
sharingData.setType("text/html");
sharingData.putExtra(android.content.Intent.EXTRA_
TEXT, Html.fromHtml("<p> Share Data
<br>Rohmad Abidin </p>"));
startActivity(Intent.createChooser(sharingData,
"Share via"));
Gambar 1.3 Share antar aplikasi
7
1.3 Short Message Service (SMS)
Untuk menggunakan SMS dengan Intent, aplikasi tidak diharuskan
menyerakan ijin khusus. Aplikasi dapat menggunakan Fungsi
ACTION_SENDTO dengan melewatkan parameter nomor telepon yang
akan menerima pesan dengan bentuk sms:[nomor yang dituju]. Data
pesan yang akan dikirimkan dimasukkan ke dalam data ekstra Intent.
Kode 1.120
privatevoid sendSMS(String string)
{
Intent intentSms=newIntent(Intent.ACTION_SENDTO,
Uri.parse("sms:085647793000"));
intentSms.putExtra("sms:body", string);
startActivity(intentSms);
}
Tugas 1.2 :
Buatlah sebuah project bernama NamaandaSMS, buat user interface
(layout) yang berisi nomor telepon dan isi pesan. Kirim sms kepada
teman anda menggunakan aplikasi tersebut.
BAB II
SERVICE
Tujuan Pembelajaran :
Setelah mempelajari materi service, diharapkan mahasiswadapat
mengetahui cara membuat aplikasi yang dapat berjalan dibelakang layar.
2.1 Background Service
Service (android.app.service) adalah komponen di dalam arsitektur
android yang membuat aplikasi mampu menjalankan tugas dibelakang
layar, tanpa user interface (UI) dan tanpa interaksi secara langsung
dengan pengguna. Service dijalankan, dihentikan dan dikendalikan dari
komponen lain seperti Activity, BroadcastReceiver, atau Service yang
lain. Meskipun activity sudah ditutup Service tetap dapat berjalan.
Meskipun berjalan dibelakang layar, Service dijalankan di Thread
Utama aplikasi (UI thread). Service memiliki prioritas lebih tinggi
dibandingkan dengan Activity yang tidak aktif atau tidak terlihat.
Walaupun begitu, service dapat dimatikan dan dihapus oleh android
bilamana dibutuhkan memori untuk memenuhi kebutuhan aplikasi yang
sedang berjalan. Untuk mengatasi kondisi ini, Service dapat
dikonfigurasi agar dijalankan ulang secara otomatis ketika memori
tersedia.
Contoh aplikasi yang menggunakan Service adalah telepon dan pemutar
musik. Ketika sedang melakukan panggilan telpon dan disaat yang sama
kembali kehalaman home dan menjalankan aplikasi lain (missal: SMS)
dan tetap dapat melakukan panggilan telepon.
9
Ada 2 macam cara Servis dilakukan oleh aplikasi, yaitu dengan
menjalankan langsung (started) menggunakan Context.startService()
atau dengan mengikatnya (bound) menggunakan Context.bindService()
atau kombinasi kedua cara tersebut.
a. Started
Service yang dijalankan dengan startService() dan akan terus aktif
selama belum dihentikan secara eksplisit menggunakan
stopService() atau stopSelf() atau ketika kondisi kehabisan memori
terjadi.
b. Bound
Service yang diikat menggunakan bindService() akan dijalankan
terus, sepanjang masih ada aplikasi yang terikat. Ketika aplikasi
terakhir memanggil unbindService(), maka service juga akan
ditutup. Keuntungan menggunakan metode pengikatan adalah
aplikasi dan Service dapat saling bertukar data dengan model client-
server.
Masa Hidup Service :
onCreate()
Ketika startService() atau bindService() dipanggil pertama kali,
instance Service yang terdaftar di file Android Manifes akan
diciptakan. Keika instance Service telah siap, metode onCreate()
milik instance Service akan dipanggil satu kali.
onStartCommand()
bila service dipanggil dengan startService(), metode
onStartCommand() akan dipanggil setelah onCreate() pada saat
ini, Service telah aktif sepenuhnya. Metode startService() dapat
dipanggil ketika instant service sudah tercipta. Oleh karena itu,
onStartCommand() dapa dipanggil berulang-ulang selama masa
hidup Service. Metode onStartCommand() mengharapkan tiga
parameter, yaitu instant Intent, flag berisi bagaimana Service
dijalankan, dan pengenal startId.
onBind()
Metode onBind() dipanggil ketika service diikat dengan
bindService(). Ia dipangil tepat setelah onCreate(). Pada saat ini
servis telah aktif.Jika ingin membuat Service yang dapat
bertukar data dengan model client-server, anda harus
mengembalikan instance objek yang mengimplementasi
interface IBinder. Metode onBind() dapat dipanggil berulang-
ulang sebanyak jumlah pemanggilan bindService().
onUbind()
Ketika client terakhir memanggil unbindService(), metode
onUnbind() akan dipanggil. Jika anda mengembalikan nilai true,
artinya onRebind() akan dipanggilbila ada client baru yang
terhubung.
onDestroy()
Ketika stopService() atau stopSelf() dipanggil, service akan
keluar dari masa aktif service. Sebelum instance servis dihapus,
metode onDestroy() akan dipanggil.
11
Turunan Service yang digunakan untuk menjalankan tugas
dibelakang layar diluar thread utama adalah IntentService.
IntentService akan menciptakan sebuah Thread terpisah
sehingga memungkinkan aplikasi menjalankan tugas dibelakang
layar tanpa menghentikan Thread utama.
Gambar 1.4 Diagram masa hidup Service
startService()
pertama kali
onCreate()
onStartCommand()
onDestroy()
Service aktif dan
berjalan
Service shutdown
startService()
pertama kali
onCreate()
onBind()
onDestroy()
Service aktif dan
diikat
Service
shutdown
onUnbind()
bindService()
berikunya
unBindService ()
klien terakhir
startService()
berikunya
stopService()/
stopSelf()
2.2 Telpon service
Telephony mengacu pada komunikasi suara dalam bentuk sinyal listrik
yang dirambatkan melalui jaringan telepon.
Perlu diketahui bahwa sejak versi 2.1 Android tidak hanya ditujukan
untuk ponsel bergerak. Saat ini sudah banyak perangkat bukan telepon
berbasis android yang dirilis, misalnya computer tablet, tv box, smart
watch dan lain-lain.
Untuk memperluas fungsi aplikasi tidak salahnya disertakan fungsi
telepon. Akan tetapi jika anda mewajibkan fitur telephony dan ada
pengguna yang menggunakan perangkat tanpa fitur telepon, maka
program anda tidak akan ditampilkan dalam hasil pencarian android
market. Hal itu dipergunakan untuk menghindarkan pengguna dari
aplikasi yang tidak bisa dijalankan pada perangkat mereka. Sehingga
sebelum memasang fitur telephony sebaiknya dipertimbangkan secara
matang.
Untuk dapat menggunakan fitur telepon diperlukan penambahan kode
pada AndroidManifest.xml
Kode 2.1
<uses-feature
android:name=”android.hardware.telephony”
android:required=”true”/>
Jika anda menginginkan aplikasi anda dapat berjalan pada perangkat
yang tidak memiliki fitur telepon, silahkan ganti nilai
android:required menjadi false.
13
Android mendukung 2 protokol untuk panggilan telpon, yaitu tel:
(RFC 3966) dan wtai: (Wireless Telephone Application Interface)
sebuah protocol yang digunakan bersama sama dengan WAP
(Wireless Application Protocol). Contoh menyatakan sebuah nomor
telepon yang dapat dihibungi, menggunakan alamat URI (Uniform
Resource Indetifier) yaitu tel:[nomor_telpon] untuk wtai
menggunakan format wtai://wp/mc;[nomor_telepon] .
Untuk menggunakan panggilan keluar melalui aplikasi, gunakan
fitur panggilan yang telah disediakan android melalui intent bernama
ACTION_DIAL atau ACTION_CALL. ACTION_DIAL adalah
intent yang akan menampilkan layar tombol dial untuk memulai
panggilan dan pengguna harus menekan tombol dial untuk memulai
panggilan. ACTION_CALL adalah intent yang akan langsung
memulai panggilan keluar tanpa menampilkan layar tombol dial dan
tanpa perlu menekan tombol lagi. Pada ACTION_DIAL nomor
telepon tidak wajib ada, sedangkan ACTION_CALL nomor telepon
wajib ada.
Aplikasi yang menggunakman ACTION_DIAL tidak membutuhkan
izin khusus, sedangkan ACTION_CALL membutuhkan izin
CALL_PHONE pada AndroidManifest.xml
Kode 2.2
<uses-permission
android:name="android.permission.CALL_PHONE"/>
Kode 2.3
private void performDiall(String nomorTelp)
{
Intent intentCall=new Intent(Intent.
ACTION_DIAL,Uri.parse("tel:"+Uri.encode
(nomorTelp)));
startActivity(intentCall);
}
Untuk langsung melakukan panggilan keluar ganti ACTION_DIAL
dengan ACTION_CALL.
15
BAB III
DATA STORAGE
Tujuan Pembelajaran :
Setelah mempelajari materi data storage, mahasiswa diharapkan dapat
memanfaatkan media penyimpanan pada perangkat.
Data Storage adalah sebuah perangkat yang digunakan untuk menyimpan
data atau informasi. Data yang dimaksud disini adalah data ponsel, sim, data
yang disimpan dalam memori internal dan eksternal serta penyimpan data
database SQLite. Dengan mengetahui cara mengakses data-data tersebut
diatas maka pengembangan aplikasi android akan semakin luas misalnya
mencegah penggunaan aplikasi oleh dua perangkat berbeda dengan id yang
sama.
3.1 Membaca Data Ponsel dan Sim
Data ponsel seperti jenis ponsel (GSM atau CDMA), memiliki pengenal
unik ponsel (IMEI untuk GSM atau MEID untuk CDMA), dan nomor
telepon dapat diminta oleh aplikasi. Untuk membaca jenis ponsel
menggunakan getPhoneType() milik TelephonyManager. Hasil
pemrosesan ini bernilai integer. Kode untuk mengetahui type perangkat
yaitu PHONE_TYPE_GSM, PHONE_TYPE_CDMA atau
PHONE_TYPE_NONE untuk perangkat yang tidak memiliki fitur
telepon seperti tablet.
Kode 3.1
String networkType;
TelephonyManager telephonyManager =
(TelephonyManager)getSystemService(Context.TELEPH
ONY_SERVICE);
int phoneType = telephonyManager.getPhoneType();
switch (phoneType) {
case (TelephonyManager.PHONE_TYPE_CDMA):
networkType = "CDMA";
break;
case (TelephonyManager.PHONE_TYPE_GSM):
networkType = "GSM";
break;
case (TelephonyManager.PHONE_TYPE_NONE):
networkType = "None";
break;
default:
networkType="";
break;
}
//membaca IMEI (GSM) atau MEID (CDMA)
String deviceId = telephonyManager.getDeviceId();
//membaca nomor telepon
String phoneNumber =
telephonyManager.getLineNumber();
//membaca versi software
String softwareVersion = telephonyManager.
getDeviceSoftwareVersion();
Untuk membaca data SIM gunakan kode berikut ini :
Kode 3.2
//sim Country ISO Code
String simCountry=telephonyManager.getSimCountryIso();
//Operator Code (MMC+ MNC)
String OperatorCode=telephonyManager.getSimOperator();
//Nama SIM Operator
String OperatorName=telephonyManager.getSimOperatorName();
//SIM Serial Number
String simSerial = telephonyManager.getSimSerialNumber();
17
Untuk membaca data tersebut diperlukan ijin READ_PHONE_STATE
pada AndroidManifest.xml.
Kode 3.3
<uses-permission
android:name="android.permission.READ_PHONE_STATE"/>
Gambar 3.1 Menampilkan informasi ponsel dan SIM
3.2 Shared preferences
Sering aplikasi harus menyimpan data yang nantinya akan digunkan
kembali. Seperti diijinkannya pengguna mengatur konfigurasi aplikasi
sesuai keinginan. Data konfigurasi perlu disimpan agar ketika aplikasi
dijalankan dilain waktu dapat menerapkan pengaturan yang telah dibuat
sebelumnya. Shared preferences merupakan sebuah framework
(kerangka) umum, yang memungkinkan user (pengguna ) menyimpan
data secara private, dalam bentuk key/value pairs (kunci nilai
berpasangan ) dari tipe data primitif. Contoh tipe data primitif seperti :
booleans, floats, ints, longs, and strings dll.
Shared Preferences cocok untuk penggunaan data kecil seperti
menyimpan setting aplikasi dan informasi mengenai user interface. Data
dalam shared preferences disimpan dalam device android dalam bentuk
XML.
Gambar 3.2 Contoh dialog pengaturan konfigurasi
Ada tiga mode untuk shared preferences :
MODE_PRIVATE
Hanya aplikasi yang membuat Shared Preferences yang dapat
mengakses data
MODE_WORLD_READABLE
Aplikasi lain boleh membaca
19
MODE_WORLD_WRITEABLE
Aplikasi lain boleh membaca sekaligus menulis
a. Penyimpanan Shared Preferences
Shared Preferences menyimpan data dalam file XML di direktori
bernama data/data/[package]/shared_prefs, dimana [package] adalah
nama paket aplikasi yang digunakan.
Gambar 3.3 Lokasi file XML berisi data preferensi
b. Mendapatkan Instance Shared Preferences
Untuk mendapatkan instance Shared Preferences menggunakan method
getSharedPreferences() atau getPreferences(). Keduanya
mengembalikan data bertipe Shared Preferences. getSharedPreferences()
adalah method anggota tipe android.content.Context, sedangkan
getPreferences() adalah method anggota tipe activity.
Kode 3.4
SharedPreferences pref;
pref = getSharedPreferences("rohmad_pref",
MODE_PRIVATE);
//atau
SharedPreferences prefs;
prefs = getPreferences(MODE_PRIVATE);
c. Menulis data ke Shared Preferences
Untuk menulis data kedalam Shared Preferences diperlukan instance
SharedPreferences.Editor dengan memanggil metode edit(). Penulisan
data dikerjakan menggunakan metode-metode yang disediakan oleh tipe
SharedPreferences.Editor antara lain putBoolean(), putFloat(),
putString, putInt() dan putLong(). Selanjutnya memanggil metode
commit() untuk membuat perubahan menjadi permanen. Contoh untuk
penulisan tipe string dan integer sebagai berikut :
Kode 3.5
SharedPreferences pref =
getSharedPreferences("rohmad_pref",MODE_PRIVATE);
SharedPreferences.Editor ed = pref.edit();
//tulis
ed.putString("nama", "Rohmad Abidin");
ed.putInt("umur", 29);
ed.commit();
21
d. Membaca data dari Shared Preferences
Untuk membaca data, tipe SharedPreferences menyediakan beberapa
metode untuk memuat data dalam berbagai tipe antara lain, getBoolean,
getFloat(), getString(), getInt(), dan getLong(). Keempat metode
tersebut mempunyai 2 parameter yaitu nama key dan nilai default yang
akan dikembalikan seandainya nilai yang diacu oleh key tidak ada.
Nama key mengacu pada atribut name pada file XML preferensi. Contoh
membaca data yang bertipe string dan integer sebagai berikut :
Kode 3.6
String nama = pref.getString("nama","");
int umur = pref.getInt("umur", 0);
3.3 Internal & External Storage
a. Java I/O
Android juga mendukung penyimpanan data file gambar atau file
lainnya. Untuk menyimpan data berbentuk file maka proses
penyimpanan tidak membutuhkan pasangan key/value seperti
Shared Preferences. Untuk dapat menyimpan data file dapat
menggunakan pustaka java I/O. Pustaka ini menyediakan tipe
FileInputStream dan FileOutputStream yang akan mengabstraksi
data yang akan dimuat. Proses menulis dan memuat data ke atau dari
file dibungkus dalam tipe OutputStreamWriter dan
InputStreamReader.
Intance tipe FileOutputStream dapat diperoleh dengan beberapa
cara. Selain menggunakan tipe dan metode dalam pustaka Java I/O,
dapat menggunakan openFileOutput(). Metode ini digunakan
android untuk menyederhanakan proses memuat file ke
FileOutputStream. Metode ini mengharapkan dua parameter, yaitu
nama file dan mode penciptaan file dan mengembalikan instance
fileOutputStream. Setelah memiliki instance FileOutputStream,
lakukan manipulasi terhadap data file dengan terlebih dahulu
menciptakan instance OutputStreamWriter menggunakan instance
FileOutputStream.
Kode 3.7
private void doSave(String filename, String data)
throws IOException {
FileOutputStream fOut;
fOut = openFileOutput(filename,MODE_WORLD_READABLE);
OutputStreamWriter osw;
osw = new OutputStreamWriter(fOut);
osw.write(data);
osw.flush();
osw.close();
}
Jika anda tidak menentukan direktori, file akan disimpan secara
default pada direktori data/data/[nama_paket]/files/namafile
23
Gambar 3.4 Contoh letak file bila direktori tidak ditentukan
Untuk memuat data dari file Android menyediakan openFileInput()
untuk menyederhanakan proses mendapatkan instance
FileOutputStream dari nama file. Dari instance FileOutputStream
ini, anda dapat menciptakan instance tipe InputStreamReader untuk
proses baca file.
Kode 3.8
private String doLoad(String fileName) throws
IOException
{
String str="";
FileInputStream fIn;
fIn = openFileInput(fileName);
InputStreamReader isr;
isr= new InputStreamReader(fIn);
char[] inputBuffer = new char[128];
int intNumRead;
while ((intNumRead=isr.read(inputBuffer))>0)
{
//ubah char ke string
str +=String.copyValueOf(inputBuffer,0,
intNumRead);
}
isr.close();
return str;
}
b. Melakukan Baca Tulis pada Internal dan External Storage
Setiap perangkat biasanya memiliki memori internal yang dapat
digunakan untuk menyimpan file tambahan dan memiliki slot untuk
memori eksternal yang berupa kartu memori.
Untuk dapat melakukan baca tulis pada InternalStorage diperlukan
ijin permission pada AndroidPermission.xml
Kode 3.9
<uses-permission
android:name="android.permission.READ_INTERNAL
_STORAGE" />
<uses-permission
android:name="android.permission.WRITE_INTERNA
L_STORAGE" />
Sedangkan untuk dapat menggunakan memori eksternal untuk
melakukan baca tulis diperlukan ijin permission pada
AndroidManifest.xml
25
Kode 3.10
<uses-permission
android:name="android.permission.READ_EXTERNAL
_STORAGE" />
<uses-permission
android:name="android.permission.WRITE_EXTERNA
L_STORAGE" />
Untuk menyimpan data pada memori eksternal, programmer harus
melakukan pengecekan apakah memori tersebut ada dan dapat
dilakukan baca tulis atau tidak, ataukah hanya bias dibaca saja tanpa
bisa ditulis. Pemanggilan fungsi Environment.MEDIA_MOUNTED
untuk media yang dapat dilakukan baca tulis dan Environment
.MEDIA_MOUNTED_READ_ONLY untuk media yang hanya bisa
dibaca dan tidak bisa ditulis. Metode akan menghasilan tipe data
booelan (true/false).
Kode 3.11
private boolean isExternalStoragePresent()
{
boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;
String state =
Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
// bisa membaca dan menulis media
mExternalStorageAvailable =
mExternalStorageWriteable = true;
} else if
(Environment.MEDIA_MOUNTED_READ_ONLY.equ
als(state)) {
// hanya bisa membaca media
mExternalStorageAvailable = true;
mExternalStorageWriteable = false;
} else {
//ada yang salah, tidak diketahui bisa
dibaca tulis atau tidak
mExternalStorageAvailable =
mExternalStorageWriteable = false;
}
if (!((mExternalStorageAvailable) &&
(mExternalStorageWriteable))) {
Toast.makeText(getApplicationContext(),
"Tidak ada Memori External, file
tersimpan di Memori Internal",
Toast.LENGTH_LONG)
.show();
}
return (mExternalStorageAvailable) &&
(mExternalStorageWriteable);
}
Untuk menyimpan file anda harus menyetahui lokasi direktori
tersebut. Tipe Environment menyediakan metode static
getExternalStorageDirectory() yang akan mengembalikan lokasi
direktori penyimpanan eksternal dalam sebuah instance tipe file.
Dari instance file ini, anda dapat mengetahui lokasi direktori dengan
memanggil getPath(), getAbsolutePath() atau getCanonicalPath().
27
Kode 3.12
File exStorage =
Environment.getExternalStorageDirectory();
String exDir = exStorage.getAbsolutePath();
Untuk membaca atau menulis file di direktori penyimpanan
eksternal maupun internal, ciptakan instance file dan melewatkan
nama direktori serta nama dile yang anda akan menipulasi. Dari
instance file tersebut, anda menciptakan instance FileOutputStream
dan FileInputStream.
Kode 3.13
File txtFile = new File(exDir, "textdata.txt");
FileInputStream fIn = new FileInputStream(txtFile);
InputStreamReader isr = new InputStreamReader(fIn);
3.4 SQLITE
Android menyediakan system manajemen database yang ringan dan
cocok untuk perangkat mobile yang memiliki sumber daya terbatas yang
disebut SQLite. SQLite diciptakan untuk menyimpan data relasional.
File atau data akan disimpan terstruktur di database secara private.
SQLite dirancang sebagai pustaka yang berdiri sendiri dengan seminimal
mungkin mengurangi ketergantungan pada pustaka lain.
Pada umumnya aplikasi dengan embedded database tidak menyertakan
database yang sudah berbentuk pada saat aplikasi itu diinstal pada
perangkat. Jadi yang diinstal hanya programnya, sedangkan databasenya
tidak ada sama sekali. Database akan dibuat pada saat aplikasi itu
dijalankan pertama kali, yaitu program akan memeriksa apakah database
ditemukan. Jika database tidak ditemukan maka serangkaian perintah
SQL akan menjalankan perintah CREATE yang akan membentuk file
database diikuti dengan table-table di dalamnya. Tentunya programmer
harus membuat sendiri perintah SQL tersebut secara spesifik tergantung
struktur data di dalam aplikasi yang dibuatnya. Ini adalah teknik yang
biasanya digunakan programmer dalam membuat sebuah aplikasi
dengan embedded database dimana ia tidak menyertakan file database di
dalam paket instalasi aplikasi.
SQLite tidak mengadopsi model klient-server. Melalui pustaka SQLite,
aplikasi dapat langsung mengelola database di file tanpa melalui aplikasi
server. Keuntungannya, langkah setup akan lebih mudah. Anda tidak
akan menemukan kerumitan konfigurasi server seperti pada system
manajemen database lain. Sedangkan kekurangannya, karena dikelola
sendiri, integritas database sangat berpengaruh pada praktik
pemrograman yang baik.
a. Menciptakan Database
SQLite di android tidak mempunyai aplikasi bantuan sebagai antar
muka pengelolaan database. Android menyediakan instance
SQLiteOpenHelper untuk menciptakan database dan struktur table di
dalamnya. Untuk menggunakannya aplikasi harus membuat turunan
tipe ini. Ada 2 metode SQLiteOpenHelper yang harus anda
turunkan, yakni :
29
onCreate(SQLiteDatabase adb). Metode ini dipanggil ketika
database telah diciptakan. Dalam metode ini, ciptakan tabel-
tabel yang diperlukan.
onUpgrade(SQLiteDatabase adb). Metode yang dipanggil ketika
database perlu di-upgrade. Metode ini akan dipanggil ketika
versi database aplikasi berubah.
Berikut ini contoh sebuah kelas SQLiteHelper yang merupakan
perluasan dari kelas SQLiteOpenHelper
Kode 3.14
public class SQLiteHelper extends SQLiteOpenHelper
{
private static final String nama_database =
"laporan.db";
private static final int versi_database = 1;
private static final String buat_tabel_barang =
"CREATE TABLE IF NOT EXISTS
tabel_barang(kode TEXT PRIMARY KEY,nama
TEXT,harga INTEGER, jumlah INTEGER)";
private static final String hapus_tabel_barang =
"DROP TABLE IF EXISTS buat_tabel_barang";
public SQLiteHelper(Context context) {
super(context, nama_database, null,
versi_database);
}
@Override
public void onCreate(SQLiteDatabase
sqLiteDatabase) {
sqLiteDatabase.execSQL(buat_tabel_barang);
System.out.println("tabel_barang sudah dibuat");
}
@Override
public void onUpgrade(SQLiteDatabase database, int
versi_lama, int versi_baru) {
database.execSQL(hapus_tabel_barang);
onCreate(database);
}
}
b. Instance SQLiteDatabase
Untuk memanipulasi data ada beberapa metode yang dapat
digunakan yaitu :
exectSQL()
mengirimkan perintah SQL yang bukan SELECT atau perintah
lain yang mengembalikan data. Jika anda akrab dengan sintaks
bahasa SQL, metode ini cocok untuk anda karena anda diminta
menuliskan syntax SQL secara langsung.
insert()
menambahkan record baru ke dalam sebuah table. Anda tidak
menyusun perintah SQL secara langsung.
delete()
menghapus record dari sebuah table. Anda tidak menyusun
perintah SQL secara langsung.
update()
Memperbaharui isi record dalam sebuah table. Anda tidak
menyusun perintah SQL secara langsung.
rawQuery()
31
Menjalankan perintah SQL yang mengembalikan data seperti
SELECT. Anda harus menyusun perintah SELECT.
query()
Memuat data dari table. Anda tidak menyusun perintah SQL
SELECT secara langsung.
Berikut ini contoh penggunaan instance SQLite :
Kode 3.15
public void hapus_barang(int kode) {
SQLiteDatabase database = this.getWritableDatabase();
database.execSQL("DELETE FROM tabel_barang WHERE
kode ='" + kode+ "'");
database.close();
}
public int update_barang(int kode, String nama,
int harga, int jumlah) {
SQLiteDatabase database =
this.getWritableDatabase();
ContentValues recordBarang = new ContentValues();
recordBarang.put("nama", nama);
recordBarang.put("harga", harga);
recordBarang.put("jumlah", jumlah);
return database.update("tabel_barang",
recordBarang, "kode=" + kode, null);
}
public void tambah_barang(String idbrg, String
namabrg, int harga, int jumlah) {
SQLiteDatabase database =
this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("kode", idbrg);
values.put("nama", namabrg);
values.put("harga", harga);
values.put("jumlah", jumlah);
database.insert("tabel_barang", null, values);
database.close();
}
c. Menampilkan data database SQLite
Untuk melihat data pada database SQLite pada emulator, tambahkan
plugin com.questoid.sqlitebrowser_1.2.0.jar ke dalam folder plugin.
Gambar 3.5 Letak Folder Plugin
Selanjutnya buka File Explorer , lokasi database SQLite berada pada
direktori bernama data/data/[package]/databases, dimana
[package] adalah nama paket aplikasi yang digunakan.
Sorot database yang dimaksud, kemudian klik SQLite Browser
sebelah kanan.
33
Gambar3.6 Letak database dan SQLite Browser
Pada tab QuestoidSQLiteBrowser pilih Browse Data kemudian pilih
tabel yang ingin ditampilkan.
Gambar 3.7 Menampilkan record pada SQLite Browser
SQLite Browser
BAB IV
ANDROID WEB
Tujuan Pembelajaran :
Setelah mempelajari materi android web diharapkan mahasiswa dapat
mengerti dasar pengaksesan server melalui aplikasi android.
4.1 Linkify
Secara default, teks yang berada pada TextView bersifat read only dan
tidak dapat di klik walaupun teks tersebut adalah sebuah link website
maupun email. Android sudah menyediakan sebuah tools khusus sendiri
agar proses tersebut menjadi mudah, yaitu dengan menggunakan class
Linkify. Class Linkify secara otomatis akan mendeteksi link yang sesui
untuk link yang akan di eksekusi. Class ini dapat digunakan pada
TextView yang telah di atur.
Untuk menggunakan class ini diperlukan import class Linkify.
Kode 4.1
import android.text.util.Linkify;
Untuk menambahkan aksi pada Text View diperlukan pemanggilan
metode addLinks pada class Linkify.
Kode 4.2
Linkify.addLinks(teksview, Linkify.ALL);
35
Contoh Penerapan :
Kode 4.3
<TextView
android:id="@+id/links"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
TextView tvLinks = (TextView)
findViewById(R.id.links);
tvLinks.setText("Rohmad Abidin \n" +
"Stekom Siliwangi \n" +
"http://www.stekom.ac.id \n" +
"+6285647793633 \n" +
"[email protected] \n");
// proses menambahkan Links pada TextView
Linkify.addLinks(tvLinks, Linkify.ALL);
Gambar 4.1 TextView yang telah menjadi link
Class Linkify secara otomatis akan mengarahkan aksi yang cocok untuk
link yang telah dibuat, jika hanya sebuah Teks biasa yang tidak
mengandung unsure link, maka teks tersebut tidak akan memiliki aksi.
Untuk menjalankan aksi tidak diperlukan permission pada
AndroidManifest.xml.
4.2 WebView
WebView adalah turunan dari View untuk menampilkan halaman web
aplikasi. WebView dibangun atas WebKit browser engine, sama seperti
aplikasi Browser yang disediakan Android. Menu, toolbar atau scrollbar
seperti pada browser pada umumnya tidak akan terlihat karena yang
ditampilkan hanya isi webnya saja.
WebView cocok untuk menampilkan sesuatu yang dapat berubah.
WebView biasanya digunakan untuk menampilkan konten yang
kompleks dan sering terjadi perubahan. WebView mampu menampilkan
konten web baik online maupun offline, mendukung penuh teknologi
HTML5, JavaScript dan CSS.
WebKit adalah pustaka rendering engine open source yang berfungsi
menampilkan halaman web. WebKit juga menyediakann fitur interaksi
seperti mengikuti link yang di klik oleh pengguna. WebKit adalah
proyek open source sehingga banyak pengembang OS yang
menggunakannya. Versi WebKit satu dengan lainnya mungkin memiliki
sedikit perbedaan.
WebView menggunakan Chromium yaitu browser enggine yang berada
di belakang web browser Chrome. Chromium menggunakan blink,
rendering engine turunan WebKit.
Untuk menggunakan WebView yang dapat mengakses halaman web
secara online harus mengertakan ijin permission.INTERNET, namun
untuk memuat halaman web yang berada dipenyimpanan lokal, anda
tidak membutuhkan ijin khusus.
37
Kode 4.4
<uses-permission
android:name="android.permission.INTERNET" />
Instance WebView
Untuk menciptakan instance WebView diperlukan layout untuk
menampilkannya. Tambahkan kode berikut pada layout (xml).
Kode 4.5
<WebView
android:id="@+id/webViewDemo"
android:background="#00ffcc"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Untuk activitynya tambahkan kode berikut ini :
Kode 4.6
WebView webview =(WebView)findViewById
(R.id.webViewDemo);
webview.setWebViewClient(new WebViewClient());
webview .getSettings().setJavaScriptEnabled(true);
webview .getSettings().setDomStorageEnabled(true);
webview.loadUrl("http://stekom.ac.id ");
Gambar 4.2 Website STEKOM ditampilkan dengan WebView
Untuk menampilkan WebView secara offline anda diharuskan memiliki
sebuat file .html yang telah anda simpan pada sebuah tempat. Misalnya :
direktori asset/bantuan.html . Untuk memuat gunakan loadUrl().
Kode 4.7
//memuat dokumen bantuan.html
webview.loadUrl("file:///android_asset/bantuan.html");
//memuat file gambar dari res/drawable
webview.loadUrl("file:///android_res/drawable/ic_laun
cher.png");
39
Tugas :
Buatlah sebuah project yang menampilkan button pengembang dan button
menuju halaman facebook anda. Arahkan button pengembang pada sebuah
halaman html yang anda modifikasi sendiri dan letakkan pada folder asset.
Untuk button link menuju facebook berfungsi menampilkan halaman
facebook anda pada WebView.
BAB V
LOCATION BASED SERVICE
Tujuan Pembelajaran :
Setelah mempelajari materi Location Based Service diharapkan
mahasiswa dapat membuat dan mengembangkan aplikasi berbasis lokasi.
5.1 GPS
Suatu gadged dapat mendapatkan lokasi dari GPS, Network Location
Provider atau bisa dari keduanya. Cell-id (sim card), dan wifi adalah
contoh Network Location Provider.
Fungsi utama GPS adalah pemetaan, pencarian lokasi dan arah.
Teknologi GPS pada awalnya dikembangkan untuk pekerluan militer,
namun kemudian dibuka untuk umum. Teknologi GPS terdiri dari
konstelasi 27 satelit yang mengelilingi bumi (24 satelit aktif ditambah 3
satelit cadangan).
Untuk keperluan pemetaan, permukaan bumi dipetakan menggunakan
system koordinat 2D. tiap titik di permukaan bumi diacu oleh dua
besaran yaitu latitude (lintang) dan longitude (bujur).
Teknik penentuan lokasi piranti penerima GPS menggunakan titik
perpotongan empat persamaan ruang berbentuk bola (3D trilateration)
bukan lingkaran, mengingat pancaran sinyal GPS dari satelit menyebar
kesegala arah membentuk bola. Untuk 3D trilateration, jumlah satelit
yang digunakan paling tidak adalah 4 satelit.
41
5.2 Mendapatkan Nilai Longitude dan Latitude
Untuk dapat menggunakan GPS diperlukan permission pada
AndroidManifest.xml berikut ini :
Kode 5.1
<uses-permission
android:name="android.permission.ACCESS_FINE_LOC
ATION" />
<uses-permission
android:name="android.permission.ACCESS_COARSE_L
OCATION" />
<!-- tambahan feature jika target android 5.0 (API
Level 21 keatas) -->
<uses-feature
android:name="android.hardware.location.gps" />
ACCESS_FINE_LOCATION merupakan ijin untuk menentukan lokasi
dari GPS, ACESS_COARSE_LOCATION merupakan ijin untuk
menentukan lokasi dari cell-id dan wifi.
Untuk activity nya tambahkan kode berikut ini :
Kode 5.2
GPSTracker gps = new
GPSTracker(AndroidGPSTrackingActivity.this);
// Check if GPS aktif
if(gps.canGetLocation()) {
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
Toast.makeText(getApplicationContext(), "Your
Location is - \nLat: " + latitude + "\nLong: "
+ longitude, Toast.LENGTH_LONG).show();
} else {
// tidak bisa mendapatkan data, minta pengguna
aktifkan GPS.
gps.showSettingsAlert();
}
Gambar 5.1 hasil pencarian Longitude dan Latitude GPS
5.3 Permintaan Alamat
Google sebagai raksasa dibidang teknologi telah memetakan sebagian
bumi dengan google map. Kita dapat meminta alamat sesuai dengan data
longitude dan latitude secara gratis dan data yang ditampilkan
menggunakan format JSON.
43
Anda bisa mencoba dengan memasukkan alamat web berikut ini pada
browser anda :
Kode 5.3
http://maps.googleapis.com/maps/api/geocode/json?latl
ng=-6.9875089,110.3675197&sensor=true
Alamat web diatas merupakan link untuk mendapatkan alamat secara
lengkap dari kampus STEKOM Siliwangi berdasarkan data pada Google
Map. -6.9875089 merupakan nilai Latitude dan 110.3675197
merupakan nilai Latitude.
5.4 Marker
Untuk menampilkan suatu tempat menggunakan marker atau pin dapat
menggunakan alamat web berikut ini :
Kode 5.4
http://maps.google.com/?q="+latitude+","+longitude
Untuk penerapan pada aplikasi android anda dapat membuatnya secara
mudah menggunakan intent untuk memanggil browser.
Kode 5.5
GPSTracker gps = new GPSTracker(GPSSayaBrowser.this);
// Cek Apakah GPS aktif
if(gps.canGetLocation()) {
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setData(Uri.parse("http://maps.google.com/?q="
+latitude+","+longitude));
startActivity(intent);
} else {
gps.showSettingsAlert();
}
Gambar 5.2 Hasil marker menggunakan Google Map
Anda dapat mengembangkan aplikasi ini untuk membuat jalur yang harus
dilewati untuk sampai pada suatu tempat yang telah ditentukan sebelumnya.
Misalnya lokasi wisata.
45
BAB VI
ANDROID CLIENT SERVER
Tujuan Pembelajaran :
Setelah mempelajari materi Android Client Server, diharapkan
mahasiswa dapat mengetahui model komunikasi antara aplikasi android
dengan server untuk pengembangan aplikasi berbasis client server.
Smartphone bukan lagi sekedar alat telphon. Smartphone adalah komputer
mini yang dapat berkomunikasi dengan dunia luar. Aplikasi memanfaatkan
jaringan untuk beragam alasan, misalnya menampilkan kontent terbaru,
memindahkan beban pemprosesan ke server bertenaga besar, atau
menggunakan media penyimpanan yang lebih besar di luar penyimpanan
ponsel (cloud computing).
6.1 Koneksi dan Jaringan
Android menyediakan dukungan terhadap beragam jenis teknologi
koneksi data antara lain :
a. Mobile Data Access
Koneksi data menggunakan teknologi seperti 2G, 3G dan 4G (LTE).
Koneksi data disediakan oleh operator jaringan seluler.
b. Wifi
WIFI (Wireless Fidelity) adalah teknologi data nirkabel dengan
jangkauan sekitar 100m dan memungkinkan kecepatan transfer lebih
tinggi antara 10-300 Mbps. Ada beberapa standar yang berbeda,
yaitu 802.11a, 802.11g, dan 802.11n. Stantar kecepatan tersebut
dibedakan oleh kecepatan transfer. Standar kecepatan tertinggi saat
tulisan ini dibuat adalah 802.11n dengan kecepatan maksimun
300Mbps.
c. Bluetooth
Bluetooth adalah teknologi koneksi data nirkabel yang dirancang
untuk pertukaran data dalam jarak pendek sekitar 10m. Teknologi
ini memungkinkan dibentuknya Personal Area Network nirkabel
dalam radius terbatas.
d. WiMAX
WiMAX merupakan kependekan dari Worldwide Interoperability
for Microwave Access. Standar IEEE untuk WiMAX adalah 802.16
dan tergolong Wireless Metropolitan Area Network (WMAN).
WiMAX bekerja di dua pita frequensi 2-11 GHz dan memiliki
jangkauan 50 km dengan kecepatan hingga 80 Mbps. WiMAX
memungkinkan wireless LAN kecil saling terhubung dengan
WiMAX untuk membentuk wireless MAN besar.
e. Ethernet
Ethernet adalah teknologi koneksi data berbasis kabel dan telah
diadopsi luas pada PC. Ethernet memungkinkan anda untuk
membangun sebuah Local Area Network (LAN) yang
menghubungkan mesin-mesih berjarak dekat. Pada perangkat
android, teknologi ini pernah diterapkan pada tablet, tetapi dalam
perkembangannya Ethernet digantikan dengan Wifi dan Mobile Data
Access.
47
Untuk menguji konektifitas jaringan, aplikasi android wajib
menyertakan ijin android.permission.ACCESS_NETWORK_STATE
pada AndroidManifest.xml
Kode 6.1
<uses-permission
android:name="android.permission.ACCESS_NETWORK_
STATE" />
Android menyediakan ConnectivityManager dalam paket pustaka
android.net. Anda dapat mendeteksi apakah koneksi melalui Wifi,
Mobile carrier, WiMAX atau Bluetooth tersedia. Aplikasi dapat
meminta instance ConnectivityManager menggunakan
getSystemService() dengan melewatkan nilai konstan
Context.CONNECTIVITY_SERVICE
Kode 6.2
public boolean cek_status(Context cek) {
ConnectivityManager cm = (ConnectivityManager) cek
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if (info != null && info.isConnected()) {
return true;
} else {
return false;
}
}
Metode diatas akan menghasilkan nilai boolean (true/false) sehingga
dapat digunakan untuk menguji koneksi data apakah sudah diaktifkan
atau belum.
6.2 JSON Format
JSON (JavaScript Object Notation) adalah format pertukaran data yang
ringan, mudah dibaca dan ditulis oleh manusia, serta mudah
diterjemahkan dan dibuat (generate) oleh komputer. Format ini dibuat
berdasarkan bagian dari Bahasa Pemprograman JavaScript, Standar
ECMA-262 Edisi ke-3 - Desember 1999.
JSON terbuat dari dua struktur:
Kumpulan pasangan nama/nilai. Pada beberapa bahasa, hal ini
dinyatakan sebagai objek (object), rekaman (record), struktur
(struct), kamus (dictionary), tabel hash (hash table), daftar
berkunci (keyed list), atau associative array.
Daftar nilai terurutkan (an ordered list of values). Pada
kebanyakan bahasa, hal ini dinyatakan sebagai larik (array),
vektor (vector), daftar (list), atau urutan (sequence).
Struktur-struktur data ini disebut sebagai struktur data universal. Pada
dasarnya, semua bahasa pemprograman moderen mendukung struktur
data ini dalam bentuk yang sama maupun berlainan. Hal ini pantas
disebut demikian karena format data mudah dipertukarkan dengan
bahasa-bahasa pemprograman yang juga berdasarkan pada struktur data
ini.
49
JSON menggunakan bentuk sebagai berikut:
a. Objek adalah sepasang nama/nilai yang tidak terurutkan. Objek
dimulai dengan { (kurung kurawal buka) dan diakhiri dengan
} (kurung kurawal tutup). Setiap nama diikuti dengan : (titik dua)
dan setiap pasangan nama/nilai dipisahkan oleh , (koma).
b. Larik adalah kumpulan nilai yang terurutkan. Larik dimulai dengan
[ (kurung kotak buka) dan diakhiri dengan ] (kurung kotak tutup).
Setiap nilai dipisahkan oleh , (koma).
c. Nilai (value) dapat berupa sebuah string dalam tanda kutip ganda,
atau angka, atau true atau false atau null, atau sebuah objek atau
sebuah larik. Struktur-struktur tersebut dapat disusun bertingkat.
d. String adalah kumpulan dari nol atau lebih karakter Unicode, yang
dibungkus dengan tanda kutip ganda. Di dalam string dapat
digunakan backslash escapes "\" untuk membentuk karakter khusus.
Sebuah karakter mewakili karakter tunggal pada string. String sangat
mirip dengan string C atau Java.
e. Angka adalah sangat mirip dengan angka di C atau Java, kecuali
format oktal dan heksadesimal tidak digunakan.
Spasi kosong (whitespace) dapat disisipkan di antara pasangan
tanda-tanda tersebut, kecuali beberapa detil encoding yang secara
lengkap dipaparkan oleh bahasa pemprograman yang bersangkutan.
51
Berikut ini adalah contoh format JSON
{
"namaDepan": "Budi",
"namaBelakang": "Sbudi",
"alamat": {
"namaJalan": "Jl. Sudirman 15A",
"kota": "Jakarta Selatan",
"provinsi": "DKI Jakarta",
"kodePos": 11111
},
"nomerTelepon": [
"021 555-1234",
"021 555-4567"
]
}
Untuk membuat data dalam format JSON jarang sekali dibuat secara
manual, programmer biasanya membuat format JSON menggunakan
Script PHP. Berikut ini contoh penggunaan PHP dalam membuat format
JSON.
Kode 6.3
Dari data diatas akan tercipta 2 objek yaitu select dan data, select dapat
digunakan untuk menampilkan hasil query yang akan dibuat format
JSON, sedangkan data akan digunakan untuk menunjukkan adanya data
(1) atau data kosong (0). Banyaknya objek dan data dapat disesuaikan
dengan kebutuhan masing-masing programmer.
6.3 Pertukaran Data Client-Server
Android mempunyai kemampuan untuk mengakses database yang ada
pada server. Untuk mendukung pertukaran data antara aplikasi android
dengan server, disediakan pustaka utama yang menangani protocol
HTTP, yaitu HttpGET/HttpPOST dan HttpURLConnection.
Pengaturan ijin
Aplikasi android yang akan mengakses server (online/localhost)
diwajibkan untuk menyertakan ijin android.permission.INTERNET
dalam AndroidManifest.xml. tanpa ijin ini, aplikasi anda akan menerima
eksepsi SocketException dengan pesan error “permission denied”.
Kode 6.4
<uses-permission
android:name="android.permission.INTERNET" />
Dalam pembuatan aplikasi android, programmer akan menggunakan
konsep berbasis objek, oleh karena itu lebih disarankan membuat kelas
tersendiri untuk menangani koneksi ke server.
53
CustomHttpClient.java
//class ini digunakan untuk proses client dalam akses
ke media internet
public class CustomHttpClient {
public static final int HTTP_TIMOUT=30*1000;
private static HttpClient mHttpClient;
private static HttpClient getHttpClient(){
if (mHttpClient==null) {
mHttpClient=new DefaultHttpClient();
final HttpParams
param=mHttpClient.getParams();
HttpConnectionParams.setConnectionTimeout(param,
HTTP_TIMOUT);
HttpConnectionParams.setSoTimeout(param,
HTTP_TIMOUT);
ConnManagerParams.setTimeout(param, HTTP_TIMOUT);
}
return mHttpClient;
}
//metode Post
public static String executeHttpPost(String
url,ArrayList<NameValuePair> postParameters)
throws Exception{
BufferedReader in=null;
try {
HttpClient client=getHttpClient();
String server="http://xxx.com/"+url;
HttpPost request=new HttpPost(server);
UrlEncodedFormEntity formEntity=new
UrlEncodedFormEntity(postParameters);
request.setEntity(formEntity);
HttpResponse response=client.execute(request);
in=new BufferedReader(new
InputStreamReader(response.getEntity().getCo
ntent()));
StringBuffer sb=new StringBuffer("");
String line="";
String NL=System.getProperty("line.separator");
while ((line=in.readLine())!=null) {
sb.append(line+NL);
}
in.close();
String result=sb.toString();
return result;
}finally{
if (in!=null) {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
//metode Get
public static String executeHttpGet(String url)
throws Exception{
BufferedReader in=null;
try{
HttpClient client=getHttpClient();
HttpGet request=new HttpGet();
String server="http://xxx.com/"+url;
request.setURI(new URI(server));
HttpResponse
response=client.execute(request);
in=new BufferedReader(new
InputStreamReader(response.getEntity().getContent
()));
StringBuffer sb=new StringBuffer("");
String line="";
String NL=System.getProperty("line.separator");
while ((line=in.readLine())!=null) {
sb.append(line+NL);
}
in.close();
String result=sb.toString();
55
return result;
}finally{
if (in!=null) {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Kode String server="http://xxx.com/"+url; merupakan nama
server yang akan diakses dan +url merupakan file .php yang akan
diakses. Selama masa pembangunan aplikasi nama server diisi dengan
alamat ip dari localhost atau ip default untuk aplikasi android mengakses
localhost yaitu 10.0.2.2
Untuk menggunakan metode CustomHttpClient.java cukup mudah, anda
tinggal memilih menggunakan metode eksekusi Post/Get. Berikut ini contoh
menggunakan metode executeHttpPost().
Kode 6.5
private String tujuan="login.php";
// instansiasi class ArrayList
ArrayList<NameValuePair> data = new
ArrayList<NameValuePair>();
//isi nilai data
data.add(new BasicNameValuePair("username",”rohmad”));
data.add(new BasicNameValuePair("pass",”qwerty”));
//eksekusi menggunakan HttpPost pada activity
CustomHttpClient
String Content = CustomHttpClient.executeHttpPost(tujuan,data);
Pada sisi server, file yang dituju (login.php) mengolah data masukan
kemudian memberikan output data.
Kode 6.6
Kode diatas akan mengembalikan nilai sesuai hasil pengolahan dari nilai
masukan. Aplikasi yang telah mendapat nilai balik dari server dapat
mengolah data secara mandiri.
57
Kode 6.7
// instansiasi kelas JSONObject
jObject = new JSONObject(Content);
int sukses = jObject.getInt("sukses");
if (sukses == 1) {
JSONArray menuitemArray =
jObject.getJSONArray("select");
// Tampung data record dari server
String nama =
menuitemArray.getJSONObject(0).getString("nama").
toString();
String email =
menuitemArray.getJSONObject(0).getString("email").
toString();
BAB VII
PUBLIKASI APLIKASI
Tujuan Pembelajaran :
Setelah mempelajari materi publikasi aplikasi, diharapkan mahasiswa
dapat melakukan rilis aplikasi dan mendistribusikan aplikasi secara baik
dan benar.
7.1 Rilis Aplikasi
Aplikasi yang telah dibuat, tentunya ingin di publikasikan agar dapat
digunakan oleh banyak orang. Agar aplikasi yang dibuat tidak membuat
pengguna kecewa maka diperlukan beberapa kali pengujian, dikarenakan
banyaknya tipe perangkat dan jenis Versi OS Android yang berbeda.
Berikut ini adalah langkah-langkah yang diperlukan untuk merilis
sebuah aplikasi :
59
Gambar 7.1 Langkah umum proses merilis aplikasi
Dalam tahap uji release sebaiknya diuji menggunakan beberapa
perangkat dengan versi OS Android yang berbeda. Fokuskan pengujian
pada fungsi-fungsi dasar yang harus dilakukan oleh aplikasi.
a. Pengaturan versi
Sejak Android SDK 1.0, file AndroidManifest.xml menyertakan
attribute android:versionCode dan android:versionName.
Kode 7.1
<manifest
xmlns:android="http://schemas.android.com/apk/
res/android"
package="com.latihanlinkfy"
android:versionCode="1"
android:versionName="1.0" >
Attribut android:versionCode berisi kode untuk membedakan rilis
satu dengan lainnya. Untuk tiap rilis baru, tambahkan kode dengan
+1. Nilai kode ini akan memudahkan pengembang dalam rilis
aplikasi terbaru. Kode ini juga digunakan oleh took online seperti
Google Play untuk memberitahu pengguna apabila ada update
aplikasi.
Attribut android.versionName adalah String berisi versi aplikasi
yang di rilis. Susunan versi aplikasi dengan fomat [versi
mayor].[versi minor].[versi build]. Penomoran sepenuhnya
diserahkan kepada pengembang aplikasi. Sebagai panduan, jika
membuat perubahan besar, tambahkan versi mayor dengan 1. Bila
melakukan perubahan kecil tetapi banyak tambahkan versi minor
dengan 1. Bila hanya melakukan sedikit perubahan, tambahkan pada
versi build. Attribut ini akan digunakan oleh system android dan
toko online untuk menampilkan informasi tekstual versi aplikasi.
Gambar 7.2 Informasi Aplikasi pada Google Play
61
b. Mengatur Nama Aplikasi
Agar dapat dipublikasikan, aplikasi wajib menyertakan attribute
android:label pada tag application di file AndroidManifest.xml
attribut dapat anda mengatur nama menggunakan String pada folder
values/strings.xml atau anda tulikan langsung pada android label.
Misal : android:label="Nama aplikasi"
Kode 7.2
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
c. Mengatur SDK untuk aplikasi
Pastikan pengaturan <uses-sdk> dengan minimum API yang
diperlukan dan tareget API yang diinginkan. Toko online akan
menggunakan data ini untuk menyaring aplikasi dan tidak akan
ditampilkan pada hasil pencarian bila perangkat pengguna tidak
didukung.
Kode 7.2
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
d. Tanda Tangan Digital
Aplikasi android siap install (.apk) akan secara otomatis tercipta saat
anda melakukan running application. File tersebut berada pada
folder bin Anda dapat mengcopy dan mendistribusikan aplikasi
tersebut. Akan tetapi jika ingin mendistribusikan lewat toko online
seperti Google Play, aplikasi anda wajib diberikan tanda tangan
digital (key). Caranya sebagai berikut :
Klik kanan pada aplikasi pilih Android Tools Export Signed
Application Package project yang akan di eksport next
Browse untuk menetukan lokasi penyimpanan hasil eksport, buatlah
folder (missal : folder key )untuk menampung key yang akan dibuat
nanti.
Gambar 7.3 Menciptakan key untuk aplikasi baru
Password yang anda masukkan jangan sampai terlupa, karena hal
password yang anda masukkan juga akan diuji saat anda melakukan
upload dan update aplikasi menggunakan toko online.
Selanjutnya anda diminta melengkapi form Key Creation .
63
Gambar 7.4 Form Key Creation
Selanjutnya, anda akan diminta menentukan lokasi file akan
disimpan. Klik finish. Aplikasi anda siap untuk di distribusikan
secara online maupun offline.
7.2 Distribusi Aplikasi
Distribusi yang dimaksud disini adalah distribusi pada toko online. Jalur
distribusi aplikasi ada beberapa tempat diantaranya :
a. Google Play
Google Play adalah toko resmi Android. Setiap piranti android
selalu menyediakan aplikasi client Google Play yang mengijinkan
pengguna mengunduh dan menginstal aplikasi yang tersedia. Untuk
dapat mendistribusikan aplikasi melalui Google Play anda wajib
mendaftarkan akun developer. Anda akan dibebani biaya melalui
kartu kredit (biaya saat ini USD 25). Alamat Google Play Developer
console dapat diakses melalui https://play.google.com/apps/publish
Kelebihan :
1. Jumlah pengunjung sangat banyak, sehingga potensi ekonomi
sangat besar.
2. Waktu rilis lebih singkat, karena aplikasi yang didistribusikan
tidak melalui sertifikat ketat.
Kekurangan :
1. Jumlah aplikasi yang sangat banyak, menyebabkan persaingan
sangat ketat, sehingga selain aplikasi yang bagus, juga
diperlukan promosi yang baik agar aplikasi dikenali calon
pengguna.
2. Tidak ada pengujian pada aplikasi oleh pihak Google Play Store,
sehingga apabila ditemukan cacat, crash atau isu lainnya
diserahkan pada pengembang dan pengguna.
b. Samsung Apps
Samsung Apps adalah sebuah toko virtual atau daring (online) yang
bertujuan menyediakan berbagai aplikasi mobile yang hanya
dikembangkan dan dipilih untuk Samsung. Aplikasi Samsung Apps
tersedia otomatis di piranti android buatan Samsung. Dengan pangsa
pasar Samsung yang besar, toko online dapat dijadikan alternatif
untuk mempublikasikan aplikasi.
Kelebihan :
1. Tidak dibebani biaya untuk membuka akun developer.
65
2. Jumlah aplikasi yang ada pada Samsung Apps tidak sepadat
Google Play, sehinga kemungkinan ditemukan oleh calon
pengguna lebih besar.
3. Staf Samsung Apps akan menguji aplikasi sebelum disetujui,
sehingga apa bila ditemukan crash atau bug pada program,
pengembang program akan diberitahu mengenai isu yang
ditemukan. Hal ini sangat berguna karena pengembang akan
mendapatkan penguji Quality Issurance (QA) tanpa perlu
membayar dan aplikasi yang lolos sertifikasi jau lebih
berkualitas.
Kekurangan :
1. Sertifikasi dan pengujian membutuhkan waktu, sehingga time to
market lebih lama.
2. Saat menambahkan deskripsi aplikasi harus menggunakan
bahasa inggris sehingga sedikit menyusahkan pengembang dan
calon pengguna yang kurang mengerti bahasa inggris.
c. Amazon Appstore
Amazon Appstore adalah toko aplikasi seluler untuk Android yang
diluncurkan pada 22 Maret 2011. Aplikasi Amazon App tersedia
otomatis di piranti E-Book reader Kidle buatan Amazon yang
berbasis android. Untuk perangkat yang lain, pengguna harus
mengunduh aplikasi Amazon App dari Google Play.
Kelebihan :
1. Proses pendaftaran akun developer gratis.
2. Amazone Appstore tidak menerapkan kebijakan sertifikasi.
3. Jumlah aplikasi pada Amazon App tidak padat.
Kekurangan :
Jumlah pengunjung yang sedikit, sehingga potensi ekonomi
mungkin lebih kecil.
d. Jalur Distribusi alternatif
Selain 3 jalur distribusi yang telah disebutkan terdapat pula jalur
GetJar dan UStore. GetJar (http://getjar.com) pada awalnya berdiri
untuk mengediakan jalur distribusi berbagai aplikasi java. Saat ini,
Getjar juga mendistribusikan aplikasi android. Sedangkan UStore
(http://u-store.co.id) adalah toko online PT. Telekomunikasi
Indonesia. Selain itu operator seluler Telkomsel memiliki program
TemanDev (http://www.telkomsel.com/temandev) untuk
menggandeng pengembang lokal membangun industri kreatif.
67
DAFTAR PUSTAKA
Google, Inc. 2014. Android SDK Documentation.
https://developer.android.com/ tools /sdk
Huda, Arif Akbarul. 2012. 24 Jam!! Pintar Pemrograman Android.
Yogyakarta : CV. Andi Offset.
Juhara, Zamrony P. 2016. Panduan Lengkap Pemrograman Android.
Yogyakarta : CV. ANDI OFFSET.
Tim EMS. 2015. Pemrograman Android Dalam Sehari. Jakarta : PT. Elex
Media Komputindo