Anda di halaman 1dari 26

GPS dan Location Services

Mata Kuliah Pilihan

: Praktikum Mobile Programming

Jumlah SKS

: 1 SKS

Dosen

: Aldy Rialdy Atmadja, ST.

POKOK BAHASAN :
GPS Location.
Location Services.
TUJUAN :
Mahasiswa dapat membuat aplikasi menggunakan fitur GPS dalam menentukan suatu
lokasi.
Mahasiswa dapat membuat aplikasi menggunakan Location Services dengan
mempergunakan fitur yang ada pada Google Maps dalam menampilkan peta.

GPS Location dan Location Services


Pada pertemuan kali ini, akan ditambahkan beberapa modul untuk mengaplikasikan fitur GPS dan
juga Google Maps pada suatu program. Sehingga yang akan dilakukan pada modul ini skan sedikit
memodifikasi program yang telah dikerjakan kemarin.
Fitur GPS Location akan diletakkan untuk mengambil nilai GPS Location yang akan disimpan pada
basis data SQLite. Berikut ini, kode program yang ditambahkan sebagai berikut, pada class Contact.
Contact.java
package prak.mobpro.praktikum12;
public class Contact {
private int _id;
private String _name;
private String _phonenumber;
private String _longlokasi;
private String _latlokasi;
public Contact(){
}
public Contact(String name, String phonenumber, String longi, String lat){
this._name = name;
this._phonenumber = phonenumber;
this._longlokasi = longi;
this.setLatlokasi(lat);
}
public Contact(int id,String name, String phonenumber, String longi,
String lat){
this._id = id;
this._name = name;
this._phonenumber = phonenumber;
this._longlokasi = longi;
this.setLatlokasi(lat);
}
public int getId() {
return _id;
}
public void setId(int id) {
this._id = id;
}
public String getName() {
return _name;
}

public void setName(String name) {


this._name = name;
}
public String getPhonenumber() {
return _phonenumber;
}
public void setPhonenumber(String phonenumber) {
this._phonenumber = phonenumber;
}
public String getLonglokasi() {
return _longlokasi;
}
public void setLonglokasi(String _longlokasi) {
this._longlokasi = _longlokasi;
}
public String getLatlokasi() {
return _latlokasi;
}
public void setLatlokasi(String _latlokasi) {
this._latlokasi = _latlokasi;
}
}

1. Kemudian, untuk dapat mengakses database tersebut diperlukan file handler, dimana
didalamnya akan ditangani query-query dan segala sesuatu yang berhubungan dengan akses
terhadap pada pada SQLite. Beberapa method yang dibuat didalamnya terdiri dari methodmethod untuk Create, Read, Update dan Delete (CRUD). Berikut ini kelas DatabaseHandler
yang dibuat, pada Database Handler yang ditambahkan beberapa identitas untuk
menampung lokasi latitude dan longitude.
DatabaseHandler.java
package prak.mobpro.praktikum12;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHandler extends SQLiteOpenHelper{
//Database version
private static final int DATABASE_VERSION = 1;
//Database name
private static final String DATABASE_NAME = "contacsManager";
//Contacts table name
private static final String TABLE_CONTACTS = "contacs";

//Contacs table columns names


private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";
private static final String KEY_PH_NO = "phone_number";
private static final String KEY_LONG = "longitude";
private static final String KEY_LAT = "latitude";
public DatabaseHandler(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String
CREATE_CONTACTS_TABLE
=
"CREATE
TABLE_CONTACTS +"("
+ KEY_ID +" INTEGER PRIMARY KEY,"
+ KEY_NAME +" TEXT,"
+ KEY_PH_NO +" TEXT,"
+ KEY_LONG +" TEXT,"
+ KEY_LAT +" TEXT);";
db.execSQL(CREATE_CONTACTS_TABLE);
}

TABLE

"

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS" + TABLE_CONTACTS);
onCreate(db);
}
public void addContact(Contact contact){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, contact.getName());
values.put(KEY_PH_NO, contact.getPhonenumber());
values.put(KEY_LONG, contact.getLonglokasi());
values.put(KEY_LAT, contact.getLatlokasi());
db.insert(TABLE_CONTACTS, null, values);
db.close();
}
public Contact getContact(int id){
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_CONTACTS, new String[]{
KEY_ID,KEY_NAME, KEY_PH_NO, KEY_LONG, KEY_LAT},

KEY_ID + "=?", new String[]{String.valueOf(id)}, null, null, null);


if(cursor != null){
cursor.moveToFirst();
}
Contact
contact
=
new
Contact(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4));
return contact;
}
public List<Contact> getAllContacts(){
List<Contact> contactList = new ArrayList<Contact>();
String selectQuery = "SELECT * FROM "+ TABLE_CONTACTS;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if(cursor.moveToFirst()){
do{
Contact contact = new Contact();
contact.setId(Integer.parseInt(cursor.getString(0)));
contact.setName(cursor.getString(1));
contact.setPhonenumber(cursor.getString(2));
contact.setLonglokasi(cursor.getString(3));
contact.setLatlokasi(cursor.getString(4));
contactList.add(contact);
}
while(cursor.moveToNext());
}
return contactList;
}
public int getContactsCount(){
String countQuery = "SELECT * FROM" + TABLE_CONTACTS;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
cursor.close();
return cursor.getCount();
}
public int updateContact(Contact contact){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, contact.getName());
values.put(KEY_PH_NO, contact.getPhonenumber());
values.put(KEY_LONG, contact.getLonglokasi());
values.put(KEY_LAT, contact.getLatlokasi());
return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?", new String[]

{ String.valueOf(contact.getId())});
}
public void deleteContact(Contact contact){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_CONTACTS,
{ String.valueOf(contact.getId())});
db.close();
}
}

KEY_ID

"

?",

new

String[]

2. Kemudian kita tambahkan EditText pada activity_new_contacts.xml. Sehingga kode xml


menjadi sebagai berikut.
activity_new_contacts.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="prak.mobpro.praktikum12.NewContacts" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageView
android:id="@+id/gmbrSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/txtSave"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#AC9D93"
android:text="New Contacts"
android:textSize="16sp" />
<TextView
android:id="@+id/txtNameSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nama kontak" />
<EditText
android:id="@+id/namasave"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Nama"
android:text="" />

<TextView
android:id="@+id/txtTelpSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nomor Telepon" />
<EditText
android:id="@+id/kontaksave"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Nomor kontak"
android:inputType="number"
android:text="" />
<TextView
android:id="@+id/txtLokasi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Lokasi" />
<EditText
android:id="@+id/longsave"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Posisi longitude"
android:text="" />
<EditText
android:id="@+id/latsave"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Posisi longitude"
android:text="" />
<Button
android:id="@+id/btnSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="right"
android:text="Save" />
</LinearLayout>
</RelativeLayout>

3. Dengan demikian kode program untuk NewContacts.java akan menjadi seperti berikut.
NewContacts.java
package prak.mobpro.praktikum12;
import android.support.v7.app.ActionBarActivity;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
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.EditText;
import android.widget.Toast;
public class NewContacts extends ActionBarActivity {
Contact isikontak;
DatabaseHandler db;
int idkontak;
String namakontak;
String nokontak;
EditText nmkontak;
EditText telpkontak;
EditText lokasilong;
EditText lokasilat;
Button btnsave;
private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 3; // in
// meters
private static final long MINIMUM_TIME_BETWEEN_UPDATES = 5000; // in
// miliseconds
protected LocationManager locationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_contacts);
locationManager
getSystemService(Context.LOCATION_SERVICE);

(LocationManager)

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
MINIMUM_TIME_BETWEEN_UPDATES,
MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
new
MyLocationListener());
nmkontak = (EditText) findViewById(R.id.namasave);
telpkontak = (EditText) findViewById(R.id.kontaksave);
btnsave = (Button) findViewById(R.id.btnSave);
lokasilong = (EditText) findViewById(R.id.longsave);
lokasilat = (EditText) findViewById(R.id.latsave);
db = new DatabaseHandler(this);
btnsave.setOnClickListener(new OnClickListener() {
public void onClick(View v) {

// TODO Auto-generated method stub


String nama = nmkontak.getText().toString();
String kontak = telpkontak.getText().toString();
String lokasilo = lokasilong.getText().toString();
String lokasila = lokasilat.getText().toString();
db.addContact(new Contact(nama, kontak, lokasilo, lokasila));
Toast.makeText(getApplicationContext(),
"Kontak
baru
di
simpan",
Toast.LENGTH_SHORT).show();
Intent i = new Intent(NewContacts.this, MainActivity.class);
startActivity(i);
}
});
}
protected void showCurrentLocation() {
Location
locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
System.out.println(location);
if (location != null) {
double longi = location.getLongitude();
double lat = location.getLatitude();
lokasilong.setText(Double.toString(longi));
lokasilat.setText(Double.toString(lat));
//
String message = String.format(
//
"Current Location \n Longitude: %1$s \n Latitude: %2$s",
//
location.getLongitude(), location.getLatitude()
//
);
//
text.setText(message);
//
Toast.makeText(TestrunGPS.this, message,
//
Toast.LENGTH_LONG).show();
}

location

}
private class MyLocationListener implements LocationListener {
public void onStatusChanged(String s, int i, Bundle b) {
Toast.makeText(NewContacts.this, "Provider status changed",
Toast.LENGTH_LONG).show();
}
public void onProviderDisabled(String s) {
Toast.makeText(NewContacts.this,
"Provider disabled by the user. GPS turned off",
Toast.LENGTH_LONG).show();
}
public void onProviderEnabled(String s) {

Toast.makeText(NewContacts.this,
"Provider enabled by the user. GPS turned on",
Toast.LENGTH_LONG).show();
}

//
//
//
//

@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
double longi = location.getLongitude();
double lat = location.getLatitude();
lokasilong.setText(Double.toString(longi));
lokasilat.setText(Double.toString(lat));
String message = String.format(
"New Location \n Longitude: %1$s \n Latitude: %2$s",
location.getLongitude(), location.getLatitude());
text.setText(message);
// Toast.makeText(TestrunGPS.this, message,
// Toast.LENGTH_LONG).show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.new_contacts, 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);
}

}
4. Kemudian kita tambahkan EditText pada activity_edit_contacts.xml. Sehingga kode xml
menjadi sebagai berikut.
activity_edit_contacts.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="prak.mobpro.praktikum12.EditContacts" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageView
android:id="@+id/gmbr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/txtEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#AC9D93"
android:text="Edit Contacts"
android:textSize="16sp" />
<TextView
android:id="@+id/txtUseredit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nama kontak" />
<EditText
android:id="@+id/namaedit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Nama"
android:text="" />
<TextView
android:id="@+id/txtPassedit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nomor Telepon" />
<EditText
android:id="@+id/kontakedit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Nomor kontak"
android:inputType="number"
android:text="" />
<TextView
android:id="@+id/txtLokasiEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Lokasi" />
<EditText
android:id="@+id/longedit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Posisi longitude"
android:text="" />
<EditText

android:id="@+id/latedit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Posisi longitude"
android:text="" />
<Button
android:id="@+id/btnMap"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="right"
android:text="Lihat Map" />
<Button
android:id="@+id/btnEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="right"
android:text="Edit" />
</LinearLayout>
</RelativeLayout>

5. Dengan demikian kode program untuk EditContacts.java akan menjadi seperti berikut.
EditContacts.java
package prak.mobpro.praktikum12;
import android.support.v7.app.ActionBarActivity;
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.EditText;
import android.widget.Toast;
public class EditContacts extends ActionBarActivity {
Contact isikontak;
DatabaseHandler db;
int idkontak;
String namakontak;
String nokontak;
String llongitude;
String llatitude;
EditText nmkontak;
EditText telpkontak;
EditText lokasilong;
EditText lokasilat;
Button btnmap;
Button btnedit;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_contacts);
nmkontak = (EditText) findViewById(R.id.namaedit);
telpkontak = (EditText) findViewById(R.id.kontakedit);
lokasilong = (EditText) findViewById(R.id.longedit);
lokasilat = (EditText) findViewById(R.id.latedit);
btnedit = (Button) findViewById(R.id.btnEdit);
btnmap = (Button) findViewById(R.id.btnMap);
db = new DatabaseHandler(this);
Intent myIntent = getIntent();
int idkon = myIntent.getIntExtra("idkontak", 0);
isikontak = new Contact();
isikontak = db.getContact(idkon);
idkontak = isikontak.getId();
namakontak = isikontak.getName();
nokontak = isikontak.getPhonenumber();
llongitude = isikontak.getLonglokasi();
llatitude = isikontak.getLatlokasi();
nmkontak.setText(namakontak);
telpkontak.setText(nokontak);
lokasilong.setText(llongitude);
lokasilat.setText(llatitude);
btnmap.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
double
longsel
=
Double.parseDouble(lokasilong.getText().toString());
double latsel = Double.parseDouble(lokasilat.getText().toString());
Intent i = new Intent(EditContacts.this, ViewMap.class);
i.putExtra("latitude",latsel);
i.putExtra("longitude", longsel);
i.putExtra("nama", nmkontak.getText().toString());
startActivity(i);
}
});
btnedit.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
isikontak.setId(idkontak);

isikontak.setName(nmkontak.getText().toString());
isikontak.setPhonenumber(telpkontak.getText().toString());
isikontak.setLonglokasi(lokasilong.getText().toString());
isikontak.setLatlokasi(lokasilat.getText().toString());
db.updateContact(isikontak);
Toast.makeText(getApplicationContext(), "Kontak telah di edit",
Toast.LENGTH_SHORT).show();
Intent i = new Intent(EditContacts.this, MainActivity.class);
startActivity(i);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.edit_contacts, 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);
}
}
6. Setelah itu untuk menambahkan Maps dalam program tersebut, tellebih dahulu anda
diharuskan mendaftarkan aplikasi tersebut pada google developer dan mengaktifkan fitur
API maps. Referensi dapat anda lihat pada http://www.androidhive.info/2013/08/androidworking-with-google-maps-v2/
7. Setelah itu maka anda diperintahkan melakukan import library google-play-services-lib agar
maps tersebut dapat digunakan. Lalu gunakan library tersebut pada project yang telah
dibuat.
8. Lalu tambahkan pada manifest, API Key yang telah digenerate oleh google. Sehingga
manifest akan seperti berikut ini.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="prak.mobpro.praktikum12"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="16" />

<permission
android:name="prak.mobpro.praktikum12.permission.MAPS_RECEIVE"
android:protectionLevel="signature" >
</permission>
<uses-permission
android:name="prak.mobpro.praktikum12.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission
android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- Required OpenGL ES 2.0. for Maps V2 -->
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<!-- Requires OpenGL ES version 2 -->
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".EditContacts"
android:label="@string/title_activity_edit_contacts" >
</activity>
<activity
android:name=".NewContacts"
android:label="@string/title_activity_new_contacts" >
</activity>
<activity
android:name=".ViewMap"
android:label="@string/title_activity_view_map" >
</activity>
<!-- Google API Key -->
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="(api key anda)" />
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />

<activity
android:name=".ViewMapAll"
android:label="@string/title_activity_view_map_all" >
</activity>
</application>
</manifest>

9. Berikut ini kode xml untuk activity_main.xml dapat anda tulis sebagai berikut.
activity_main.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="prak.mobpro.praktikum12.MainActivity" >
<LinearLayout
android:id="@+id/lay1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/selection"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#99CCFF"
android:textStyle="bold"
android:text="@string/textcontacts"
android:textSize="16sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/lay2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/lay1" >
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:drawSelectorOnTop="false" />
</LinearLayout>
</RelativeLayout>

10. Sedangkan activity MainActivity untuk layout tersebut, seperti dibawah ini.
MainActivity.java
package prak.mobpro.praktikum12;
import java.util.ArrayList;
import java.util.List;

import android.support.v7.app.ActionBarActivity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class MainActivity extends ActionBarActivity {
TextView selection;
ListView list;
List<Contact> contacts;
ArrayAdapter<String> listAdapter;
ArrayList<String> namekon;
DatabaseHandler db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
selection = (TextView) findViewById(R.id.selection);
list = (ListView) findViewById(R.id.list);
db = new DatabaseHandler(this);
contacts = db.getAllContacts();
namekon = new ArrayList<String>();
for (Contact cn : contacts) {
namekon.add(cn.getName());
}
listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow,
namekon);
list.setAdapter(listAdapter);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int pos,
long id) {

// TODO Auto-generated method stub


int idkon = (int) id+1;
Object tes = list.getItemAtPosition((int) id);
int idkon = contacts.get(namekon.indexOf(tes)).getId();
System.out.println(contacts.get(namekon.indexOf(tes)).getId());
System.out.println(tes.toString());
Intent i = new Intent(MainActivity.this,EditContacts.class);
i.putExtra("idkontak",idkon);
startActivity(i);

//
//
//
//

}
});
list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int pos, long id) {
// TODO Auto-generated method stub
removeItemFromList(pos);
return true;
}
});
}
@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.tambah) {
Intent i = new Intent(MainActivity.this,NewContacts.class);
startActivity(i);
}
else if(id == R.id.keluar){
AppExit();
}
else if(id == R.id.map){
Intent i = new Intent(MainActivity.this,ViewMapAll.class);
startActivity(i);
}
return super.onOptionsItemSelected(item);
}

// method to remove list item


protected void removeItemFromList(int position) {
final int deletePosition = position;
AlertDialog.Builder alert = new AlertDialog.Builder(
MainActivity.this);
alert.setTitle("Delete");
alert.setMessage("Apakah anda ingin menghapus kontak ini?");
alert.setPositiveButton("YA", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Contact contdel = db.getContact(deletePosition+1);
db.deleteContact(contdel);
namekon.remove(deletePosition);
listAdapter.notifyDataSetChanged();
listAdapter.notifyDataSetInvalidated();
}
});
alert.setNegativeButton("TIDAK", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
alert.show();
}
public void AppExit()
{
this.finish();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
/*int pid = android.os.Process.myPid();=====> use this if you want to kill your activity. But
its not a good one to do.
android.os.Process.killProcess(pid);*/
}
}

11. Berikut ini layout beserta activity untuk menampilkan map untuk satu lokasi saja
(activity_view_map.xml)
activity_view_map.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>

ViewMap.java
package prak.mobpro.praktikum12;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class ViewMap extends Activity {
// Google Map
private GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_map);
Intent myIntent = getIntent();
double latitude = myIntent.getDoubleExtra("latitude", 0);
double longitude = myIntent.getDoubleExtra("longitude", 0);
String nmmarker = myIntent.getStringExtra("nama");
try {
// Loading map
initilizeMap();
// Changing map type

googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
// googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
// googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
// googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
// googleMap.setMapType(GoogleMap.MAP_TYPE_NONE);
// Showing / hiding your current location
googleMap.setMyLocationEnabled(true);
// Enable / Disable zooming controls
googleMap.getUiSettings().setZoomControlsEnabled(false);
// Enable / Disable my location button
googleMap.getUiSettings().setMyLocationButtonEnabled(true);
// Enable / Disable Compass icon
googleMap.getUiSettings().setCompassEnabled(true);
// Enable / Disable Rotate gesture
googleMap.getUiSettings().setRotateGesturesEnabled(true);
// Enable / Disable zooming functionality
googleMap.getUiSettings().setZoomGesturesEnabled(true);
// Adding a marker
MarkerOptions marker = new MarkerOptions()
.position(new LatLng(latitude, longitude))
.title("Rumah " + nmmarker)
.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE
_AZURE));
Log.e("Random", "> " + latitude + ", " + longitude);
googleMap.addMarker(marker);
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(latitude, longitude)).zoom(15).build();
googleMap.animateCamera(CameraUpdateFactory
.newCameraPosition(cameraPosition));
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onResume() {
super.onResume();
initilizeMap();
}

/**
* function to load map If map is not created it will create it for you
* */
private void initilizeMap() {
if (googleMap == null) {
googleMap = ((MapFragment) getFragmentManager().findFragmentById(
R.id.map)).getMap();
// check if map is created successfully or not
if (googleMap == null) {
Toast.makeText(getApplicationContext(),
"Sorry!
unable
to
Toast.LENGTH_SHORT)
.show();
}
}
}

create

maps",

/*
* creating random postion around a location for testing purpose only
*/
private double[] createRandLocation(double latitude, double longitude) {
return new double[] { latitude + ((Math.random() - 0.5) / 500),
longitude + ((Math.random() - 0.5) / 500),
150 + ((Math.random() - 0.5) * 10) };
}
}
12. Berikut ini layout beserta activity untuk menampilkan map untuk satu lokasi saja
(activity_view_map_all.xml)
activity_view_map_all.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>

ViewMapAll.java
package prak.mobpro.praktikum12;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;

import android.util.Log;
import android.widget.Toast;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class ViewMapAll extends Activity {
// Google Map
private GoogleMap googleMap;
List<Contact> contacts;
DatabaseHandler db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_map);
db = new DatabaseHandler(this);
contacts = db.getAllContacts();
try {
// Loading map
initilizeMap();
// Changing map type
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
// googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
// googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
// googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
// googleMap.setMapType(GoogleMap.MAP_TYPE_NONE);
// Showing / hiding your current location
googleMap.setMyLocationEnabled(true);
// Enable / Disable zooming controls
googleMap.getUiSettings().setZoomControlsEnabled(false);
// Enable / Disable my location button
googleMap.getUiSettings().setMyLocationButtonEnabled(true);
// Enable / Disable Compass icon
googleMap.getUiSettings().setCompassEnabled(true);
// Enable / Disable Rotate gesture

googleMap.getUiSettings().setRotateGesturesEnabled(true);
// Enable / Disable zooming functionality
googleMap.getUiSettings().setZoomGesturesEnabled(true);
// double latitude = 17.385044;
// double longitude = 78.486671;
double latitude = 0;
double longitude = 0;
// lets place some 10 random markers
for (Contact cn : contacts) {
String rumah = cn.getName();
latitude = Double.parseDouble(cn.getLatlokasi());
longitude = Double.parseDouble(cn.getLonglokasi());
// random latitude and logitude
// double[] randomLocation = createRandLocation(latitude,
// longitude);
// Adding a marker
MarkerOptions marker = new MarkerOptions()
.position(new LatLng(latitude, longitude))
.title("Rumah " + rumah)
.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactor
y.HUE_AZURE));
Log.e("Random", "> " + latitude + ", " + longitude);
// changing marker color
// if (i == 0)
// marker.icon(BitmapDescriptorFactory
// .defaultMarker(BitmapDescriptorFactory.HUE_AZURE));
// if (i == 1)
// marker.icon(BitmapDescriptorFactory
// .defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
// if (i == 2)
// marker.icon(BitmapDescriptorFactory
// .defaultMarker(BitmapDescriptorFactory.HUE_CYAN));
// if (i == 3)
// marker.icon(BitmapDescriptorFactory
// .defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
// if (i == 4)
// marker.icon(BitmapDescriptorFactory
// .defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA));
// if (i == 5)
// marker.icon(BitmapDescriptorFactory
// .defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
// if (i == 6)
// marker.icon(BitmapDescriptorFactory
// .defaultMarker(BitmapDescriptorFactory.HUE_RED));

// if (i == 7)
// marker.icon(BitmapDescriptorFactory
// .defaultMarker(BitmapDescriptorFactory.HUE_ROSE));
// if (i == 8)
// marker.icon(BitmapDescriptorFactory
// .defaultMarker(BitmapDescriptorFactory.HUE_VIOLET));
// if (i == 9)
// marker.icon(BitmapDescriptorFactory
// .defaultMarker(BitmapDescriptorFactory.HUE_YELLOW));
googleMap.addMarker(marker);
// Move the camera to last position with a zoom level
}
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(latitude, longitude)).zoom(15).build();
googleMap.animateCamera(CameraUpdateFactory
.newCameraPosition(cameraPosition));
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onResume() {
super.onResume();
initilizeMap();
}
/**
* function to load map If map is not created it will create it for you
* */
private void initilizeMap() {
if (googleMap == null) {
googleMap = ((MapFragment) getFragmentManager().findFragmentById(
R.id.map)).getMap();
// check if map is created successfully or not
if (googleMap == null) {
Toast.makeText(getApplicationContext(),
"Sorry!
unable
to
Toast.LENGTH_SHORT)
.show();
}
}
}
}

create

maps",

Anda mungkin juga menyukai