Membuat Aplikasi Sensor di Ponsel dan Tablet Android Berbasis Intel Atom


* Artikel ini dipersembahkan oleh Intel Developer Zone. Untuk Mengetahui lebih lanjut tentang membuat aplikasi Android di Arstitektur Intel, kunjungi Intel Developer Zone for Android. Artikel asli dari artikel ini dapat dilihat di link ini.

Artikel ini mengenalkan kepada pengembang aplikasi tentang framework Android Sensor dan menjelaskan tentang bagaimana cara menggunakan beberapa sensor yang secara umum ada di ponsel-ponsel dan tablet-tablet berbasis prosesor Intel Atom. Di antara yang didiskusikan adalah sensor gerak, posisi, dan lingkungan. Walaupun GPS tidak dikategorikan sebagai sensor di framework Android, artikel ini juga menjelaskan tentang layanan lokasi berbasis GPS. Penjelasan di artikel ini berbasis Android 4.1, Jelly Bean.

[toc]

Sensor-Sensor di Ponsel dan Tablet Berbasis Prosesor Intel Atom

Ponsel dan tablet Android berbasis prosesor Intel Atom mendukung berbagai sensor. Sensor-sensor tersebut digunakan untuk mendeteksi gerakan dan perubahan posisi, dan melaporkan parameter lingkungan sekitarnya. Blog diagram di Gambar 1 menampilkan konfigurasi sensor yang memungkinkan di perangkat Android berbasis Intel Atom pada umumnya.

143791Gambar 1. Sensor-sensor di sistem Android berbasis Intel Atom

table_1

Framework Sensor Android

Framework sensor Android menyediakan mekanisme untuk mengakses sensor-sensor beserta datanya, terkecuali GPS, yang bisa diakses melalaui layanan lokasi Android. Kita akan membahas soal ini lebih lanjut nanti di artikel ini. Framework sensor adalah bagian dari paket android.hardware. Tabel 2 menjabarkan class dan antarmuka utama dari framework sensor.

table_2

Mendapatkan Konfigurasi Sensor

Produsen perangkat memutuskan sensor-sensor apa saja yang perlu dibenamkan dalam sebuah perangkat. Kamu harus mengetahui sensor apa saja yang tersedia ketika aplikasi berjalan dengan memanggil fungsi getSensorList() dari framework sensor SensorManager dengan parameter “Sensor.TYPE_ALL). Contoh Kode 1 menampilkan sensor-sensor yang tersedia beserta informasi produsen, daya, dan keakuratan dari tiap sensor.

package com.intel.deviceinfo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Fragment;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class SensorInfoFragment extends Fragment {

    private View mContentView;

    private ListView mSensorInfoList;	
    SimpleAdapter mSensorInfoListAdapter;

    private List<Sensor> mSensorList;

    private SensorManager mSensorManager;

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public void onPause() 
    { 
        super.onPause();
    }

    @Override
    public void onResume() 
    {
        super.onResume();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        mContentView = inflater.inflate(R.layout.content_sensorinfo_main, null);
        mContentView.setDrawingCacheEnabled(false);

        mSensorManager = (SensorManager)getActivity().getSystemService(Context.SENSOR_SERVICE);

        mSensorInfoList = (ListView)mContentView.findViewById(R.id.listSensorInfo);

        mSensorInfoList.setOnItemClickListener( new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View view, int index, long arg3) {

                // with the index, figure out what sensor was pressed
                Sensor sensor = mSensorList.get(index);

                // pass the sensor to the dialog.
                SensorDialog dialog = new SensorDialog(getActivity(), sensor);

                dialog.setContentView(R.layout.sensor_display);
                dialog.setTitle("Sensor Data");
                dialog.show();
            }
        });

        return mContentView;
    }

    void updateContent(int category, int position) {
        mSensorInfoListAdapter = new SimpleAdapter(getActivity(), 
	    getData() , android.R.layout.simple_list_item_2,
	    new String[] {
	        "NAME",
	        "VALUE"
	    },
	    new int[] { android.R.id.text1, android.R.id.text2 });
	mSensorInfoList.setAdapter(mSensorInfoListAdapter);
    }

    protected void addItem(List<Map<String, String>> data, String name, String value)   {
        Map<String, String> temp = new HashMap<String, String>();
        temp.put("NAME", name);
        temp.put("VALUE", value);
        data.add(temp);
    }

    private List<? extends Map<String, ?>> getData() {
        List<Map<String, String>> myData = new ArrayList<Map<String, String>>();
        mSensorList = mSensorManager.getSensorList(Sensor.TYPE_ALL);

        for (Sensor sensor : mSensorList ) {
            addItem(myData, sensor.getName(),  "Vendor: " + sensor.getVendor() + ", min. delay: " + sensor.getMinDelay() +", power while in use: " + sensor.getPower() + "mA, maximum range: " + sensor.getMaximumRange() + ", resolution: " + sensor.getResolution());
        }
        return myData;
    }
}

Sistem Koordinat Sensor

Framework sensor melaporkan data sensor menggunakan sistem koordinat 3-sumbu standar di mana X, Y, dan Z direpresentasikan oleh values[0], values[1], values[2] di objek SensorEvent secara berurutan.

Beberapa sensor seperti cahaya, temperatur, kedekatan, dan tekanan hanya mengembalikan satu nilai. Untuk sensor-sensor tersebut, hanya values[0] yang digunakan di objek SensorEvent.

Sensor-sensor lainnya melaporkan data dengan sistem koordinat sensor 3-sumbu standar. Berikut adalah sensor-sensor tersebut:

  • Akselerometer
  • Sensor gravitasi
  • Giroskop
  • Sensor medan geomagnetik

Sistem koordinat sensor 3- sumbu didefinisikan secara relatif dengan orientasi natural (bawaan) di sebuah layar dari perangkat. Untuk sebuah ponsel, orientasi naturalnya adalah potrait; untuk sebuah tablet, orientasi naturalnya adalah landscape. Ketika sebuah perangkat digenggam dengan orientasi naturalnya, sumbu x adalah horizontal dan menunjuk ke kanan, sumbu y adalah vertikal dan menunjuk ke atas, dan sumbu z menunjuk ke luar layar depan perangkat. Gambar 2 menampilkan sistem koordinat sensor untuk sebuah ponsel, dan Gambar 3 untuk sebuah tablet.

143792Gambar 2. Sistem koordinat sensor untuk sebuah ponsel

143793

Gambar 3. Sistem koordinat sensor untuk sebuah tablet

Poin paling penting mengenai sistem koordinat sensor adalah bahwa sistem koordinat sensor tidak pernah berubah ketika perangkatnya bergerak maupun berubah orientasinya.

Memantau Peristiwa-Peristiwa Sensor

Framework sensor melaporkan data sensor dengan objek SensorEvent. Sebuah class dapat memantau data dari sensor tertentu dengan mengimplementasikan antarmuka SensorEventListener dan mendaftarkan dengan SensorManager untuk sensor tertentu. Framework sensor menginformasikan class tersebut tentang perubahan di status sensor melalui kedua fungsi di SensorEventListener yang diimplementasikan di class tersebut:

onAccuracyChanged()

dan

onSensorChanged()

Contoh Kode 2 mengimplementasikan SensorDialog yang digunakan di contoh SensorInfoFragment yang sudah dijelaskan di bagian “Mengambil Konfigurasi Sensor”.

package com.intel.deviceinfo;

import android.app.Dialog;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;

public class SensorDialog extends Dialog implements SensorEventListener {
    Sensor mSensor;
    TextView mDataTxt;
    private SensorManager mSensorManager;

    public SensorDialog(Context ctx, Sensor sensor) {
        this(ctx);
        mSensor = sensor;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mDataTxt = (TextView) findViewById(R.id.sensorDataTxt);
        mDataTxt.setText("...");
        setTitle(mSensor.getName());
    }

    @Override
    protected void onStart() {
        super.onStart();
        mSensorManager.registerListener(this, mSensor,  SensorManager.SENSOR_DELAY_FASTEST);
    }

    @Override
    protected void onStop() {
        super.onStop();
        mSensorManager.unregisterListener(this, mSensor);
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() != mSensor.getType()) {
            return;
        }
        StringBuilder dataStrBuilder = new StringBuilder();
        if ((event.sensor.getType() == Sensor.TYPE_LIGHT)||
            (event.sensor.getType() == Sensor.TYPE_TEMPERATURE)||
            (event.sensor.getType() == Sensor.TYPE_PRESSURE)) {
            dataStrBuilder.append(String.format("Data: %.3fn", event.values[0]));
        }
        else{         
            dataStrBuilder.append( 
                String.format("Data: %.3f, %.3f, %.3fn", 
                event.values[0], event.values[1], event.values[2] ));
        }
        mDataTxt.setText(dataStrBuilder.toString());
    }
}

Sensor-Sensor Gerakan

Sensor gerak digunakan untuk memantau pergerakan perangkat seperti goncangan, perputaran, ayunan, atau kemiringan. Akselerometer dan giroskop adalah dua sensor gerak yang teresdia di banyak tablet dan ponsel.

Sensor gerak melaporkan data menggunakan sistem koordinat sensor di mana tiga nilai di objek SensorEvent, values[0], values[1], dan values[2] merepresentasikan nilai sumbu x, y, dan z secara berurutan.

Untuk mehamai sensor gerak dan menggunakan datanya dalam sebuah aplikasi, kita perlu menerapkan beberapa rumus fisika yang terkait dengan gaya, massa, percepetan, hukum Newton tentang gerak, dan hubungan antara beberapa entitas ini dalam waktu. Untuk mempelajari lebih lanjut tentang rumus-rumus ini, bisa membaca buku fisika favorit kamu ataupun dari sumber publik.

Akselerometer

Akselerometer mengukur percepatan yang ada pada sebuah perangkat dan propertinya dirangkum di Tabel 3.

table_2

Konsep untuk akselerometer diturunkan dari hukum gerak kedua Newton:

a = F / m

Percepatan sebuah objek adalah hasil dari dari gaya eksternal total yang diterapkan ke suatu objek. Gaya eksternal termasuk satu gaya yang mempengaruhi segala objek di Bumi, gravitasi. Hal ini sebanding dengan gaya total F yang diterapkan ke suatu objek dan berbanding terbalik dengan massa objek m.

Di kodingan kita, daripada langsung menggunakan rumus di atas, kita lebih peduli tentang hasil dari percepatan dalam suatu periode waktu pada kecepatan dan posisi perangkat. Rumus berikut ini menjelaskan tentang hubungan antara kecepatan sebuah objek v1, kecepatan awalnya v0, akselerasinya a, dan waktu t:

v1 = v0 + at

Untuk menghitung perpindahan posisi objek s, kita menggunakan rumus berikut:

s = at2/2

Dikarenakan gravitasi, percepatan gravitasi, direpresentasikan dengan simbol g, diterapkan ke semua objek di Bumi. Terlepas dari massa objek, g hanya bergantung pada garis lintang dari sebuah okasi objek dengan nilai di antara 9,78 dan 9,82 (m/s2). Kita menggunakan nilai standar konvensional untuk g:

g = 9.80665 (m/s2)

Karena akselerometer mengembalikan nilai menggunakan sistem koordinat multi dimensi, kita bisa menghitung jarak antaran sumbu x, y, dan z di kodingan kita menggunakan rumus berikut:

Sx = AxT2/2
Sy = AyT2/2
Sz = AzT2/2

Di mana Sx, Sy, dan Sz adalah perpindahan di sumbu x, y, dan z secara berurutan dan Ax, Ay, dan Az adalah percepatan sumbu x, y, dan z secara berurutan. T adalah waktu periode pengukuran.

public class SensorDialog extends Dialog implements SensorEventListener {
    …	
    private Sensor mSensor;
    private SensorManager mSensorManager;

    public SensorDialog(Context context) {
        super(context);
        mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
        mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    …
}

Kode 3. Pembuatan instance Akselerometer

Kadang kali kita tidak menggunakan semua nilai data dari ketiga dimensi. Di lain waktu juga kita mungkin perlu untuk mempertimbangkan orientasi perangkat. Sebagai contoh, untuk aplikasi labirin, kita hanya menggunakan percepatan gravitasi di sumbu x dan y untuk menghitung arah dan jarak pergerakan bola berdasarkan orientasi perangkat. Potongan kode di bawah ini (Kode 4) menggambarkan logikanya:

@Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER) {
        return;
    } 
float accelX, accelY;
…
//detect the current rotation currentRotation from its “natural orientation”
//using the WindowManager
    switch (currentRotation) {
        case Surface.ROTATION_0:
            accelX = event.values[0];
            accelY = event.values[1];
            break;
        case Surface.ROTATION_90:
            accelX = -event.values[0];
            accelY = event.values[1];
            break;
        case Surface.ROTATION_180:
            accelX = -event.values[0];
            accelY = -event.values[1];
            break;
        case Surface.ROTATION_270:
            accelX = event.values[0];
            accelY = -event.values[1];
            break;
    }
    //calculate the ball’s moving distances along x, and y using accelX, accelY and the time delta
        …
    }
}

Kode 4. Memperhitungkan orientari perangkat ketika menggunakan data akselerometer di game labirin

Giroskop

Giroskop mengukur tingkat perputaran sebuah perangkat di sekitar sumbu x, y, dan z seperti yang diperlihatkan di Tabel 4. Nilai data di giroskop bisa berupa nilai positif ataupun negatif. Dengan melihat posisi awal sepanjang pertengahan sumbu-sumbu positif, jika perputarannya berlawanan jarum jam dengan sumbu maka nilainya positif; jika perputarannya searah jarum jam dengan sumbu maka nilainya negatif. Kita juga dapat menentukan arah dari sebuah nilai di giroskop menggunakan “peraturan tangan kanan” seperti yang diperlihatkan di Gambar 4.

143794

Gambar 4. Menggunakan “peraturan tangan kanan” untuk menentukan arah perputaran positif

table_4

Sensor-Sensor Posisi

Banyak tablet Android mendukung dua sensor posisi: magnetometer dan sensor kedekatan. Magnetometer mengukur kekuatan medan magnet Bumi di sepanjang sumbu x, y, dan z sedangkan sensor kedekatan mendeteksi jarak antara perangkat dengan objek lain.

Magnetometer

Penggunaan paling penting dari magnetometer (seperti yang dijabarkan di Tabel 5) di sistem Android adalah untuk mengimplementasikan kompas.

table_5

Kode 6 memperlihatkan bagaimana caranya membuat instance magnetometer

public class SensorDialog extends Dialog implements SensorEventListener {
    …	
    private Sensor mMagnetometer;
    private SensorManager mSensorManager;

    public SensorDialog(Context context) {
        super(context);
        mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
        mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
    …
}

 

Kode 6. Membuat instance Giroskop

Kedekatan

Sensor kedekatan memberikan jarak antara perangkat dengan objek lainnya. Perangkat tersebut dapat menggunakannya untuk mendeteksi apakah perangkat digunakan dekat dengan pengguna (lihat Tabel 6), sehingga dapat ditentukan apakah pengguna sedang melakukan panggilan telepon dan mematikan layar ketika panggilan telepon berlangsung.

table_6

Kode 7 menampilkan bagaimana caranya membuat instance sensor kedekatan.

public class SensorDialog extends Dialog implements SensorEventListener {
    …	
    private Sensor mProximity;
    private SensorManager mSensorManager;

    public SensorDialog(Context context) {
        super(context);
        mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
        mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
    …
}

Kode 7. Membuat instance sensor kedekatan

Sensor-Sensor Lingkungan

Sensor-sensor lingkungan mendeteksi dan melaporkan parameter lingkungan sekitar perangkat seperti cahaya, temperatur, tekanan, dan kelembaban. Sensor cahaya sekitar (ALS) dan sensor tekanan (barometer) sudah tersedia di banyak tablet.

Sensor Cahaya Sekitar (ALS)

Sensor cahaya sekitar (seperti yang dijabarkan di Tabel 7) digunakan oleh sistem Android untuk mendeteksi pencahayaan di lingkungan sekitar dan mengatur tingkat keterangan layar seusai dengan level pencahayaan sekitar.

table_7

Kode 8 menampilkan bagaimana caranya membuat instance ALS.

…	
private Sensor mALS;
private SensorManager mSensorManager;

…	
    mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
    mALS = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
…

Kode 8. Pembuatan instance sensor cahaya sekitar

Barometer

Aplikasi dapat menggunakan sensor tekanan atmosfer (barometer),  seperti yang dijabarkan di Tabel 8, untuk menghitung ketinggian dari sebuah perangkat.

table_8

Kode 9 menampilkan bagaimana caranya membuat instance barometer.

…	
private Sensor mBarometer;
private SensorManager mSensorManager;

…	
    mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
    mBarometer = mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);
…

Kode 9. Pembuatan instance Barometer

Pedoman Performa dan Optimalisasi Sensor

Untuk menggunakan sensor-sensor di aplikasi kita, ada bagusnya untuk mengikuti pedoman berikut:

  • Selalu cek ketersediaan sebuah sensor sebelum menggunakan sensor tersebut
    Platform Android tidak memerlukan pencantuman ataupun pengecualian sensor tertentu dalam sebuah perangkat. Sebelum menggunakan sebuah sensor, selalu cek terlebih dahulu apakah sensornya tersedia atau tidak.
  • Selalu hapus sensor listener dari daftar
    Jika aktifitas yang menggunakan sensor listener menghilang atau dialog dihentikan, hapus sensor listener-nya dari daftar. Ini dapat dilakukan melalui metode onPause() dari sebuah aktivitas atau onStop() dari sebuah dialog. Jika tidak, makan sensor akan terus menerus mengambil data dan berakibat ke tersedotnya daya baterai.
  • Jangan blok metode onSensorChanged()
    Metode onSensorChanged() sering dipanggil oleh sistem untuk melaporkan data. Kita harus memasukkan sesedikit mungkin logika koding di metode ini. Kalkulasi yang kompleks dengan data dari sensor harus dikeluarkan dari lingkup onSensorChanged()
  • Selalu tes aplikasi yang menggunakan sensor di ponsel asli
    Semua sensor yang dijelaskan di artikel ini adalah berupa perangkat keras. Emulator Android mungkin tidak dapat mensimulasikan fungsi dan performa suatu sensor.

GPS dan Lokasi

GPS (Global Positioning System) adalah sistem berbasis satelit yang memberikan informasi lokasi geometris secara akurat di seluruh dunia. GPS tersedia di banyak ponsel dan tablet Android. Dari banyak perspektif, GPS berperilaku sebagai sensor posisi. GPS dapat menyediakan data lokasi yang akurat untuk aplikasi yang berjalan di sebuah perangkat. Di platform Android, GPS tidak secara langsung diatur oleh framework sensor melainkan layanan lokasi Android mengakses dan mengirimkan data GPS ke sebuah aplikasi melalui location listener callback.

Bagian ini hanya mendiskusikan GPS dan layanan lokasi dari sudut pandang sensor perangkat keras. Strategi lokasi lengkap yang ditawarkan oleh Android 4.2 dan tablet serta ponsel Android berbasis Intel Atom terlalu besar topiknya dan di luar lingkup artikel ini.

Layanan Lokasi Android

Menggunakan GPS bukanlah satu-satunya cara untuk mendapatkan informasi lokasi dari sebuah perangkat Android. Android juga dapat menggunakan WiFi, jaringan seluler, dan jaringan nirkabel lainnya untuk mendapatkan lokasi perangkat saat ini. Tabel 9 mendaftarkan class dan interface utama yang digunakan untuk mengakses layanan lokasi Android.

table_9

Memperoleh Pembaharuan Lokasi GPS

Mirip dengan mekanisme penggunaan framework sensor untuk mengakses data sensor, aplikasi mengimplementasikan beberapa metode callback yang didefinisikan di interface LocationListener untuk mendapatkan pembaharuan lokasi GPS. LocationManager mengirimkan notifikasi pembaharuan GPS ke aplikasi melalui callback (peraturan “Jangan memanggil kami, kami yang memanggil kamu”).

Untuk mengakses data lokasi GPS di aplikasi, kita perlu untuk meminta izin akses lokasi di Android manifest file (Kode 10).

<manifest …>
…
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
…  
</manifest>

Kode 10. Meminta izin akses lokasi di Android manifest file

Kode 11 menampilkan bagaimana caranya mendapatkan pembaharuan GPS dan menampilkan garis garis lintang dan garis bujur pada dialog text view.

package com.intel.deviceinfo;

import android.app.Dialog;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;

public class GpsDialog extends Dialog implements LocationListener {
    TextView mDataTxt;
    private LocationManager mLocationManager;

    public GpsDialog(Context context) {
        super(context);
        mLocationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
	       mDataTxt = (TextView) findViewById(R.id.sensorDataTxt);
          mDataTxt.setText("...");

        setTitle("Gps Data");
    }

    @Override
    protected void onStart() {
        super.onStart();
        mLocationManager.requestLocationUpdates(
            LocationManager.GPS_PROVIDER, 0, 0, this);
    }

    @Override
    protected void onStop() {
        super.onStop();
        mLocationManager.removeUpdates(this);
    }

    @Override
    public void onStatusChanged(String provider, int status, 
        Bundle extras) {
    }

    @Override
    public void onProviderEnabled(String provider) {
    }

    @Override
    public void onProviderDisabled(String provider) {
    }

    @Override
    public void onLocationChanged(Location location) {
        StringBuilder dataStrBuilder = new StringBuilder();
        dataStrBuilder.append(String.format("Latitude: %.3f,   Logitude%.3fn", location.getLatitude(), location.getLongitude()));
        mDataTxt.setText(dataStrBuilder.toString());

    }
}

Kode 11. Sebuah dialog yang menampilkan data lokasi GPS

Pedoman Performa dan Optimalisasi GPS dan Lokasi

GPS menyediakan informasi lokasi yang paling akurat dalam perangkat. Di lain pihak, sebagai fitur perangkat keras, GPS mengkonsumsi daya lebih. GPS juga memerlukan waktu untuk mendapatkan lokasi pertama yang tepat. Berikut adalah beberapa pedoman yang sebaiknya kita ikuti ketika mengembangkan aplikasi yang menggunakan GPS atau membutuhkan data lokasi.

  • Pertimbangkan semua penyedia lokasi yang tersedia
    Selain GPS_PROVIDER, ada juga NETWORK_PROVIDER. Jika aplikasi kita hanya membutuhkan data lokasi yang kasar, ada baiknya untuk menggunakan NETWORK_PROVIDER saja.
  • Gunakan lokasi tembolok
    Butuh waktu bagi GPS untuk mendapatkan lokasi pertama yang tepat. Ketika aplikasi kita sedang menunggu GPS untuk mendapatkan lokasi yang akurat, kita dapat menggunakan lokasi yang disediakan oleh metode getlastKnownLocation() dari LocationManager untuk melakukan sebagian pekerjaan.
  • Minimalisir frekuensi dan durasi permintaan pembaharuan lokasi
    Kita sebaiknya meminta pembaharuan lokasi hanya ketika diperlukan segera hapus dari daftar di LocationManager setelah kita tidak lagi membutuhkan pembaharuan lokasi.

Kesimpulan

Platform Android menyediakan API bagi pengembang aplikasi untuk mengakses sensor-sensor yang terdapat dalam perangkat. Sensor-sensor ini dapat menyediakan data mentah tentang pergerakan, posisi, dan kondisi lingkungan sekitar dari sebuah perangkat dengan akurasi dan presisi yang tinggi. Dalam mengembangkan aplikasi sensor, kita sebaiknya mengikuti panduan terbaik untuk memperbaiki performa dan efisiensi daya.

* Kunjungi Intel Developer Zone for Android untuk mengetahui lebih lanjut. Artikel asli dari artikel ini dapat dilihat di link ini.