Indonesian (Bahasa Indonesia) translation by Sandi Muamar (you can also view the original English article)
Membuat aplikasi context-aware adalah salah satu cara terbaik untuk menawarkan layanan yang berguna untuk pengguna Anda. Sementara masih ada beberapa cara untuk melakukan ini — termasuk geofences, activity recognition dan location service lainnya-Google telah baru saja merilis Awareness API, yang memungkinkan developer untuk membuat aplikasi yang cerdas bereaksi terhadap real word user situasi. Awareness API menggabungkan Places API, Location API, Activity Recognition, dan Nearby API, serta menambahkan dukungan untuk headphone state dan cuaca deteksi.
Dalam tutorial ini Anda akan belajar tentang Awareness API dan cara mengakses snapshot dari data, serta cara membuat listener (dikenal sebagai fences, mengambil nama mereka dari geofences) untuk kombinasi pengguna kondisi yang sesuai dengan tujuan aplikasi Anda. Hal ini dapat berguna untuk berbagai macam aplikasi, seperti location-based games, menawarkan kupon untuk pengguna di toko-toko, dan memulai sebuah aplikasi musik ketika Anda mendeteksi pengguna berolahraga. Semua kode untuk aplikasi sampel ini dapat ditemukan pada GitHub.
1. Menyiapkan Developer Console
Sebelum menyelam ke dalam aplikasi Android Anda, Anda akan perlu untuk mengatur Google Play Service melalui Google API Console. Jika Anda sudah memiliki proyek yang dibuat, Anda dapat melewatkan langkah pertama bagian ini. Jika tidak, Anda dapat mengklik link di atas dan Ikuti sepanjang untuk membuat proyek baru untuk aplikasi Anda.
Langkah 1: Menciptakan sebuah proyek
Untuk membuat sebuah proyek baru, klik pada tombol biru Create Project di pusat atas layar.

Ini menyajikan Anda dengan sebuah dialog yang meminta untuk nama proyek. Untuk tutorial ini, saya telah membuat sebuah proyek yang disebut TutsPlusAwareness. Ada beberapa pembatasan pada apa yang Anda dapat nama proyek Anda sebagai hanya huruf, angka, kutipan, tanda hubung, spasi, dan seru karakter yang diperbolehkan .

Setelah Anda menekan Create, dialog muncul di sudut kanan bawah halaman yang menunjukkan bahwa proyek yang sedang dibuat. Setelah sudah menghilang, proyek Anda akan tersedia untuk mengatur. Anda akan melihat sebuah layar yang mirip dengan berikut. Jika tidak, klik pada logo Google API di sudut kiri atas untuk dibawa ke layar manager API.

Langkah 2: Mengaktifkan API yang dibutuhkan
Dari layar Google APIs Overview, pilih kotak pencarian dan Cari untuk Awareness API.

Setelah Anda memilih Awareness API dari hasil yang dikembalikan, klik pada tombol Enable biru untuk memungkinkan aplikasi Anda untuk menggunakan Awareness API. Jika ini adalah pertama API Anda telah diaktifkan, Anda akan diminta untuk membuat satu set kredensial. Lanjutkan ke halaman Credentials untuk langkah 3 dari tutorial ini.

Selain Awarenes API, ada API tambahan yang Anda mungkin perlu untuk mengaktifkan. Jika aplikasi Anda menggunakan fungsi Places API Awareness, Anda akan perlu untuk mengaktifkan Google Places API untuk Android.

Jika aplikasi Anda menggunakan beacon, Anda juga akan perlu untuk mengaktifkan Nearby Messages API.
Langkah 3: Membuat Android API Key
Untuk menggunakan enabled APIs, Anda akan perlu untuk generate API key untuk aplikasi Android Anda. Pada halaman kredensial untuk proyek Google Anda, pilih Awareness API dari atas dropdown menu dan Android dari kedua.

Selanjutnya Anda akan dibawa ke layar dimana Anda dapat memasukkan nama paket untuk aplikasi Anda dan sertifikat SHA1 untuk app signing key. Untuk mendapatkan signing key untuk tombol debug di Linux atau OS X, masukkan perintah berikut dalam jendela terminal.
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
Pada Windows, Anda dapat menjalankan perintah yang sama dengan path yang ditetapkan untuk lokasi file debug.keystore Anda.

Setelah Anda klik tombol Create API key, Anda akan diberikan API key yang Anda akan perlu menggunakan dalam aplikasi Android Anda.

2. menyiapkan proyek Android
Setelah Anda memiliki API key yang dibuat dan api tepat diaktifkan, sekarang saatnya untuk mulai mendirikan proyek Android Anda. Untuk tutorial ini, kita akan membuat sebuah aplikasi tes untuk belajar API.
Untuk menunjukkan semua fitur Awareness API, tutorial ini akan fokus pada menggunakan daftar sederhana mewakili setiap fitur yang digunakan. Meskipun rincian membuat daftar ini tidak akan dibahas, Anda dapat menemukan sebuah implementasi lengkap dalam sumber GitHub untuk tutorial ini.
Langkah 1: Mengatur Play Services
Pertama Anda perlu untuk memasukkan Play Service Perpustakaan dalam file build.gradle Anda. Sementara Anda dapat memasukkan semua layanan Google Play, yang terbaik untuk menyertakan hanya paket-paket yang Anda butuhkan untuk aplikasi Anda.
Dalam kasus ini, Awareness API tersedia dalam paket ContextManager, dan it dapat dimasukkan dalam proyek Anda dengan menambahkan baris berikut dalam Anda dependencies node. Anda juga akan ingin untuk memastikan bahwa perpustakaan AppCompat disertakan, seperti ini akan digunakan untuk memeriksa izin pada Marshmallow dan di atas perangkat.
compile 'com.google.android.gms:play-services-contextmanager:9.2.0' compile 'com.android.support:appcompat-v7:23.4.0'
Setelah Anda menambahkan baris di atas, sync proyek Anda dan membuka file strings.xml untuk proyek Anda. Anda akan ingin untuk menempatkan API key Anda dari Google API konsol ke nilai string.
<string name="google_play_services_key">YOUR API KEY HERE</string>
Setelah Anda menambahkan API key Anda, Anda akan perlu untuk membuka file AndroidManifest.xml proyek Anda. Tergantung pada apa fitur Awareness API yang Anda gunakan, Anda akan perlu memiliki permission untuk aplikasi Anda. Jika aplikasi Anda menggunakan beacon, lokasi, tempat atau cuaca fungsi Awareness API, maka Anda akan perlu untuk memasukkan izin ACCESS_FINE_LOCATION
. Jika Anda perlu menggunakan activity recognition fungsi, maka Anda akan memerlukan izin ACTIVITY_RECOGNITION
.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
Selanjutnya Anda akan perlu untuk menyatakan meta-data
dalam application
node yang mengikat aplikasi Anda ke Google API service. Tergantung pada apa aplikasi Anda menggunakan, Anda akan perlu juga memasukan com.google.android.geo
dan com.google.android.nearby
metadata untuk menggunakan fitur lokasi, Beacon dan place.
<meta-data android:name="com.google.android.awareness.API_KEY" android:value="@string/google_play_services_key" /> <!-- places/location declaration --> <meta-data android:name="com.google.android.geo.API_KEY" android:value="@string/google_play_services_key" /> <!-- Beacon snapshots/fences declaration --> <meta-data android:name="com.google.android.nearby.messages.API_KEY" android:value="@string/google_play_services_key" />
Selanjutnya Anda akan perlu untuk membuka MainActivity.java file. Tambahkan antarmuka GoogleApiClient.OnConnectionFailedListener
kelas Anda dan terhubung ke Google Play Service dan Awaremess API di metode onCreate(Bundle)
Anda.
public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(Awareness.API) .enableAutoManage(this, this) .build(); mGoogleApiClient.connect(); } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {} }
Langkah 2: Permission
Sekarang Play Services sudah dikonfigurasi dalam aplikasi Android Anda, Anda akan perlu untuk memastikan bahwa pengguna Android Marshmallow atau lebih tinggi telah diberikan permission untuk aplikasi Anda untuk menggunakan lokasi mereka. Anda dapat memeriksa permission ini di onCreate(Bundle)
dan sebelum Anda mengakses semua fitur yang memerlukan permission lokasi untuk menghindari crash dalam aplikasi Anda.
private boolean checkLocationPermission() { if( !hasLocationPermission() ) { Log.e("Tuts+", "Does not have location permission granted"); requestLocationPermission(); return false; } return true; } private boolean hasLocationPermission() { return ContextCompat.checkSelfPermission( this, Manifest.permission.ACCESS_FINE_LOCATION ) == PackageManager.PERMISSION_GRANTED; }
Jika permission lokasi tidak diberikan, Anda kemudian dapat meminta bahwa pengguna mengabulkannya.
private final static int REQUEST_PERMISSION_RESULT_CODE = 42; private void requestLocationPermission() { ActivityCompat.requestPermissions( MainActivity.this, new String[]{ Manifest.permission.ACCESS_FINE_LOCATION }, REQUEST_PERMISSION_RESULT_CODE ); }
Hal ini akan menyebabkan sistem dialog muncul meminta pengguna jika mereka ingin memberikan ijin untuk aplikasi Anda untuk mengetahui lokasi mereka.

Ketika pengguna telah menanggapi, onRequestPermissionsResult()
callback akan menerima hasil, dan aplikasi Anda dapat menjawab sesuai.
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) { switch (requestCode) { case REQUEST_PERMISSION_RESULT_CODE: { // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { //granted } else { Log.e("Tuts+", "Location permission denied."); } } } }
Pada titik ini Anda harus selesai menyiapkan aplikasi Anda untuk menggunakan Awareness API.
3. menggunakan Snapshot API
Ketika Anda ingin mengumpulkan informasi tentang pengguna konteks saat ini, Anda dapat menggunakan fungsi snapshot Awareness API. API ini akan mengumpulkan informasi tergantung pada jenis API panggilan yang dibuat, dan akan cache informasi ini untuk akses cepat di berbagai aplikasi.
Headphone
Salah satu tambahan baru untuk bermain layanan melalui Awareness APIadalah kemampuan untuk mendeteksi perangkat headphone state (terpasang atau tidak). Ini dapat dilakukan oleh getHeadphoneState()
di Awareness API dan membaca HeadphoneState
dari HeadphoneStateResult
.
private void detectHeadphones() { Awareness.SnapshotApi.getHeadphoneState(mGoogleApiClient) .setResultCallback(new ResultCallback<HeadphoneStateResult>() { @Override public void onResult(@NonNull HeadphoneStateResult headphoneStateResult) { HeadphoneState headphoneState = headphoneStateResult.getHeadphoneState(); if (headphoneState.getState() == HeadphoneState.PLUGGED_IN) { Log.e("Tuts+", "Headphones are plugged in."); } else { Log.e("Tuts+", "Headphones are NOT plugged in."); } } }); }
Setelah Anda mengetahui state headphone, aplikasi Anda dapat melakukan tindakan apapun yang diperlukan berdasarkan informasi tersebut.
Lokasi
Meskipun sebelumnya tersedia sebagai sebuah komponen dalam Google Play Service fitur lokasi Awareness API telah dioptimalkan untuk penggunaan efisiensi dan baterai. Daripada menggunakan Location API tradisional dan menerima lokasi interval waktu tertentu, Anda dapat meminta sebuah snapshot kali lokasi seperti.
private void detectLocation() { if( !checkLocationPermission() ) { return; } Awareness.SnapshotApi.getLocation(mGoogleApiClient) .setResultCallback(new ResultCallback<LocationResult>() { @Override public void onResult(@NonNull LocationResult locationResult) { Location location = locationResult.getLocation(); Log.e("Tuts+", "Latitude: " + location.getLatitude() + ", Longitude: " + location.getLongitude()); Log.e("Tuts+", "Provider: " + location.getProvider() + " time: " + location.getTime()); if( location.hasAccuracy() ) { Log.e("Tuts+", "Accuracy: " + location.getAccuracy()); } if( location.hasAltitude() ) { Log.e("Tuts+", "Altitude: " + location.getAltitude()); } if( location.hasBearing() ) { Log.e("Tuts+", "Bearing: " + location.getBearing()); } if( location.hasSpeed() ) { Log.e("Tuts+", "Speed: " + location.getSpeed()); } } }); }
Seperti yang Anda lihat, pertama Anda harus memverifikasi bahwa pengguna telah diberikan location permisssion. Jika mereka memiliki, Anda dapat mengambil objek Location standar dengan sejumlah besar data tentang pengguna lokasi dan kecepatan, serta informasi tentang keakuratan data ini.
Anda akan ingin untuk memastikan bahwa bagian tertentu dari informasi yang ada sebelum menggunakannya, sebagai beberapa data mungkin tidak tersedia. Menjalankan kode ini harus output semua data yang tersedia untuk log sistem Android.
E/Tuts+: Latitude: 39.9255456, Longitude: -105.02939579999999 E/Tuts+: Provider: Snapshot time: 1468696704662 E/Tuts+: Accuracy: 20.0 E/Tuts+: Altitude: 0.0 E/Tuts+: Speed: 0.0
Place
Sementara tidak kuat sebagai standar Places API, Awareness API menyediakan cara cepat dan mudah digunakan untuk mengumpulkan informasi tentang tempat-tempat dekat pengguna. Panggilan API ini akan mengembalikan List
PlaceLikelihood
objek yang berisi Place
dan float
mewakili bagaimana besar kemungkinan pengguna di tempat itu (maka nama objek).
Setiap Place
objek mungkin berisi nama, alamat, nomor telepon, jenis tempat, penilaian pengguna, dan informasi berguna lainnya. Anda dapat meminta tempat terdekat untuk pengguna setelah melakukan verifikasi bahwa pengguna memiliki izin lokasi yang diberikan.
private void detectNearbyPlaces() { if( !checkLocationPermission() ) { return; } Awareness.SnapshotApi.getPlaces(mGoogleApiClient) .setResultCallback(new ResultCallback<PlacesResult>() { @Override public void onResult(@NonNull PlacesResult placesResult) { Place place; for( PlaceLikelihood placeLikelihood : placesResult.getPlaceLikelihoods() ) { place = placeLikelihood.getPlace(); Log.e("Tuts+", place.getName().toString() + "\n" + place.getAddress().toString() ); Log.e("Tuts+", "Rating: " + place.getRating() ); Log.e("Tuts+", "Likelihood that the user is here: " + placeLikelihood.getLikelihood() * 100 + "%"); } } }); }
Ketika menjalankan metode di atas, Anda akan melihat output yang mirip dengan berikut di konsol Android. Jika nilai tidak tersedia untuk beberapa, -1
akan dikembalikan.
E/Tuts+: North Side Tavern 12708 Lowell Blvd, Broomfield, CO 80020, USA E/Tuts+: Rating: 4.7 E/Tuts+: Likelihood that the user is here: 10.0% E/Tuts+: Quilt Store 12710 Lowell Blvd, Broomfield, CO 80020, USA E/Tuts+: Rating: 4.3 E/Tuts+: Likelihood that the user is here: 10.0% E/Tuts+: Absolute Floor Care 3508 W 126th Pl, Broomfield, CO 80020, USA E/Tuts+: Rating: -1.0
Cuaca
Tambahan baru ke Google Play Service melalui Awareness API adalah kemampuan untuk mendapatkan kondisi cuaca untuk pengguna. Fitur ini juga memerlukan izin lokasi untuk pengguna Marshmallow dan kemudian.
Menggunakan permintaan ini, Anda akan bisa mendapatkan suhu di daerah pengguna di Fahrenheit atau Celcius. Anda juga dapat mengetahui apa rasanya suhu, titik embun (suhu yang mana air di udara dapat mulai mengembun menjadi embun), persentase kelembaban, dan kondisi cuaca.
private void detectWeather() { if( !checkLocationPermission() ) { return; } Awareness.SnapshotApi.getWeather(mGoogleApiClient) .setResultCallback(new ResultCallback<WeatherResult>() { @Override public void onResult(@NonNull WeatherResult weatherResult) { Weather weather = weatherResult.getWeather(); Log.e("Tuts+", "Temp: " + weather.getTemperature(Weather.FAHRENHEIT)); Log.e("Tuts+", "Feels like: " + weather.getFeelsLikeTemperature(Weather.FAHRENHEIT)); Log.e("Tuts+", "Dew point: " + weather.getDewPoint(Weather.FAHRENHEIT)); Log.e("Tuts+", "Humidity: " + weather.getHumidity() ); if( weather.getConditions()[0] == Weather.CONDITION_CLOUDY ) { Log.e("Tuts+", "Looks like there's some clouds out there"); } } }); }
Kode di atas harus output sesuatu yang mirip dengan ini.
E/Tuts+: Temp: 88.0 E/Tuts+: Feels like: 88.0 E/Tuts+: Dew point: 50.0 E/Tuts+: Humidity: 28 E/Tuts+: Looks like there's some clouds out there
Satu hal yang penting untuk dicatat di sini adalah bahwa cuaca kondisi nilai akan disimpan sebagai int
. Seluruh daftar nilai-nilai kondisi dapat ditemukan dalam objek cuaca.
int CONDITION_UNKNOWN = 0; int CONDITION_CLEAR = 1; int CONDITION_CLOUDY = 2; int CONDITION_FOGGY = 3; int CONDITION_HAZY = 4; int CONDITION_ICY = 5; int CONDITION_RAINY = 6; int CONDITION_SNOWY = 7; int CONDITION_STORMY = 8; int CONDITION_WINDY = 9;
Aktivitas
Aktivitas user Anda akan memainkan peranan besar dalam bagaimana mereka berinteraksi dengan perangkat mereka, dan mendeteksi bahwa aktivitas akan memungkinkan Anda untuk memberikan pengalaman pengguna yang lebih fluid.
Misalnya, jika Anda memiliki sebuah aplikasi Kebugaran, Anda mungkin ingin mendeteksi ketika pengguna berjalan sehingga Anda dapat mulai merekam sesi Google Fit, atau Anda mungkin ingin mengirim pemberitahuan kepada pengguna Anda jika Anda mendeteksi bahwa mereka telah diam selama terlalu banyak jam sehari.
Menggunakan panggilan getDetectedActivity() di API kesadaran, Anda bisa mendapatkan daftar kemungkinan kegiatan dan berapa lama pengguna telah melakukan masing-masing.
private void detectActivity() { Awareness.SnapshotApi.getDetectedActivity(mGoogleApiClient) .setResultCallback(new ResultCallback<DetectedActivityResult>() { @Override public void onResult(@NonNull DetectedActivityResult detectedActivityResult) { ActivityRecognitionResult result = detectedActivityResult.getActivityRecognitionResult(); Log.e("Tuts+", "time: " + result.getTime()); Log.e("Tuts+", "elapsed time: " + result.getElapsedRealtimeMillis()); Log.e("Tuts+", "Most likely activity: " + result.getMostProbableActivity().toString()); for( DetectedActivity activity : result.getProbableActivities() ) { Log.e("Tuts+", "Activity: " + activity.getType() + " Likelihood: " + activity.getConfidence() ); } } }); }
Metode di atas akan menampilkan aktivitas kemungkinan bagi pengguna, berapa lama mereka sudah dalam keadaan itu, dan daftar semua kemungkinan kegiatan.
E/Tuts+: time: 1468701845962 E/Tuts+: elapsed time: 15693985 E/Tuts+: Most likely activity: DetectedActivity [type=STILL, confidence=100] E/Tuts+: Activity: 3 Likelihood: 100
Nilai-nilai tipe DetectedActivity
dapat dipetakan ke nilai berikut:
int IN_VEHICLE = 0; int ON_BICYCLE = 1; int ON_FOOT = 2; int STILL = 3; int UNKNOWN = 4; int TILTING = 5; int WALKING = 7; int RUNNING = 8;
Beacon
Jenis terakhir dari snapshot — dan paling sulit untuk mengatur karena memerlukan real-world komponen — melibatkan Beacon BLE (Bluetooth Low Energy). Sementara Nearby API adalah di luar cakupan tutorial ini, Anda dapat menginisialisasi Beacon untuk proyek Anda sendiri Google Service yang menggunakan Google Tool Beacon app.

Penting untuk dicatat adalah bahwa sekali Anda telah terdaftar beacon untuk sebuah proyek Google API, Anda tidak bisa pendaftarannya tanpa setting ulang beacon id. Ini berarti jika Anda menghapus proyek, beacon akan perlu ulang menggunakan app produsen Anda. Untuk Awareness API, namespace harus cocok proyek Google yang Anda gunakan untuk panggilan API Awareness Anda. Beacon di atas sudah terdaftar untuk tes pribadi proyek Google, maka namespace (reflected-disk-355
) yang berbeda dari yang dari contoh proyek terkait dengan tutorial ini.
Pada gambar di atas, Anda dapat melihat salah satu item di bawah lampiran. Namespace lampiran ini adalah reflected-disk-355 (tutorial ini contoh proyek namespace adalah tutsplusawareness) dan tipe adalah nearby. Anda akan memerlukan informasi ini untuk Beacon Anda sendiri untuk mendeteksi lampiran dengan Awareness API.
Bila Anda memiliki Beacon dikonfigurasi, Anda dapat kembali ke kode. Anda akan perlu untuk membuat objek List
BeaconState.TypeFilter
sehingga aplikasi Anda dapat menyaring Beacon dan lampiran yang tidak berhubungan dengan aplikasi Anda.
private static final List BEACON_TYPE_FILTERS = Arrays.asList( BeaconState.TypeFilter.with( //replace these with your beacon's values "namespace", "type") );
Jika Anda memiliki alasan untuk percaya bahwa pengguna Anda sudah dekat beacon, Anda dapat meminta lampiran dari Beacon yang sesuai dengan filter persyaratan di atas. Ini akan memerlukan izin lokasi untuk pengguna Marshmallow dan kemudian.
private void detectBeacons() { if( !checkLocationPermission() ) { return; } Awareness.SnapshotApi.getBeaconState(mGoogleApiClient, BEACON_TYPE_FILTERS) .setResultCallback(new ResultCallback<BeaconStateResult>() { @Override public void onResult(@NonNull BeaconStateResult beaconStateResult) { if (!beaconStateResult.getStatus().isSuccess()) { Log.e("Test", "Could not get beacon state."); return; } BeaconState beaconState = beaconStateResult.getBeaconState(); if( beaconState == null ) { Log.e("Tuts+", "beacon state is null"); } else { for(BeaconState.BeaconInfo info : beaconState.getBeaconInfo()) { Log.e("Tuts+", new String(info.getContent())); } } } }); }
Kode ini akan log informasi untuk lampiran terkait dengan beacon contoh di atas. Untuk contoh ini, saya telah mengkonfigurasi dua Beacon namespace yang sama dan jenis untuk menunjukkan bahwa beberapa Beacon dapat dideteksi sekaligus.
E/Tuts+: Oh hi tuts+ E/Tuts+: Portable Beacon info
4. Menggunakan Fences API
Sementara Snapshot API dapat mengambil informasi tentang pengguna konteks pada waktu tertentu, Fences API listing untuk kondisi tertentu yang harus dipenuhi sebelum mengizinkan tindakan terjadi. Fences APPI dioptimalkan untuk baterai efisien dan penggunaan data, sehingga menjadi sopan pengguna Anda.
Ada lima jenis kondisi yang Anda dapat memeriksa ketika membuat fences:
- kondisi perangkat, seperti pengguna memiliki headphone unplugged atau terpasang
- lokasi, mirip dengan geofence standar
- kehadiran tertentu BLE Beacon
- aktivitas pengguna, seperti menjalankan atau mengemudi
- waktu
Saat ini, kondisi cuaca dan tempat tidak memiliki dukungan untuk fences. Anda dapat membuat fences yang menggunakan salah satu fitur yang didukung; Namun, fitur yang sangat berguna api ini adalah bahwa operasi Logis dapat diterapkan untuk kondisi. Anda dapat mengambil beberapa fences dan menggunakan dan, atau, dan tidak operasi untuk menggabungkan kondisi yang sesuai dengan kebutuhan aplikasi Anda.
Membuat BroadcastReceiver
Sebelum Anda membuat fences Anda, Anda akan perlu untuk memiliki key value mewakili setiap fences yang app akan anda listen. Untuk menyelesaikan tutorial ini, Anda akan membangun fences yang mendeteksi ketika pengguna duduk di sebuah lokasi yang ditetapkan, seperti rumah mereka.
private final static String KEY_SITTING_AT_HOME = "sitting_at_home";
Setelah Anda memiliki key yang didefinisikan, Anda dapat broadcast Intent
maksud yang berisi kunci itu.
public class FenceBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if(TextUtils.equals(ACTION_FENCE, intent.getAction())) { FenceState fenceState = FenceState.extract(intent); if( TextUtils.equals(KEY_SITTING_AT_HOME, fenceState.getFenceKey() ) ) { if( fenceState.getCurrentState() == FenceState.TRUE ) { Log.e("Tuts+", "You've been sitting at home for too long"); } } } } }
Membuat Fences
Sekarang bahwa Anda memiliki receiver yang dibuat untuk listner event-evebt pengguna, saatnya untuk membuat fences Anda. AwarenessFence
pertama yang Anda akan membuat akan listner ketika user sedang dalam keadaan STILL
.
AwarenessFence activityFence = DetectedActivityFence.during(DetectedActivityFence.STILL);
Pagar kedua Anda akan membuat akan menunggu pengguna untuk berada di berbagai lokasi tertentu. Sementara sampel ini memiliki nilai-nilai untuk lintang dan bujur sudah ditetapkan, Anda akan ingin untuk mengubah mereka untuk mencocokkan koordinat apapun sesuai lokasi Anda untuk pengujian.
AwarenessFence homeFence = LocationFence.in(39.92, -105.7, 100000, 1000 );
Sekarang bahwa Anda memiliki dua fences, Anda dapat menggabungkan mereka untuk membuat ketiga AwarenessFence
dengan menggunakan operasi AwarenessFence.and.
AwarenessFence sittingAtHomeFence = AwarenessFence.and(homeFence, activityFence);
Akhirnya, Anda dapat membuat PendingIntent
yang akan broadcast ke BroadcastReceiver
Anda dan menambahkannya ke Awareness API yang menggunakan metode updateFences
.
Intent intent = new Intent(ACTION_FENCE); PendingIntent fencePendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); mFenceBroadcastReceiver = new FenceBroadcastReceiver(); registerReceiver(mFenceBroadcastReceiver, new IntentFilter(ACTION_FENCE)); FenceUpdateRequest.Builder builder = new FenceUpdateRequest.Builder(); builder.addFence(KEY_SITTING_AT_HOME, sittingAtHomeFence, fencePendingIntent); Awareness.FenceApi.updateFences( mGoogleApiClient, builder.build() );
Sekarang, app akan log pesan ketika pengguna duduk dalam jangkauan lokasi yang ditentukan.
Kesimpulan
Dalam tutorial ini, Anda telah belajar tentang Awareness API dan bagaimana untuk mengumpulkan informasi tentang user environment. Anda juga telah belajar bagaimana untuk mendaftar listenr untuk perubahan dalam konteks pengguna dan bertindak ketika kondisi tertentu telah dipenuhi.
Dengan informasi ini, Anda harus mampu memperluas aplikasi Anda sendiri dan menyediakan pengguna dengan pengalaman lebih menakjubkan yang berdasarkan lokasi mereka saat ini, aktivitas, dan nilai-nilai yang berguna lainnya.
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weeklyEnvato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post