Di Awareness API, konsep pagar diambil dari pembatasan wilayah, tempat wilayah geografis, atau pembatasan wilayah, ditentukan, dan aplikasi menerima callback saat pengguna memasuki atau keluar dari wilayah pembatasan wilayah. Fence API memperluas konsep pembatasan wilayah untuk menyertakan banyak kondisi konteks lainnya selain kedekatan geografis. Aplikasi menerima callback setiap kali status konteks bertransisi. Misalnya, jika aplikasi Anda menentukan pagar untuk headphone, aplikasi akan mendapatkan callback saat headphone dicolokkan dan saat dicolokkan.
Anda dapat menggunakan Fence API untuk menentukan pagar berdasarkan sinyal konteks, seperti berikut:
- Lokasi pengguna saat ini (lintang/bujur)
- Aktivitas pengguna saat ini, seperti berjalan kaki atau mengemudi.
- Kondisi khusus perangkat, seperti apakah headphone dicolokkan atau tidak.
- Kedekatan dengan beacon di sekitar
Fence API memungkinkan Anda menggabungkan beberapa
sinyal konteks
untuk membuat pagar dengan operator boolean AND
, OR
, dan NOT
. Kemudian, aplikasi Anda
akan menerima callback setiap kali kondisi pagar terpenuhi. Beberapa contoh
pagar yang mungkin ada mencakup:
- Pengguna mencolokkan headphone dan mulai berjalan.
- Pengguna memasuki pembatasan wilayah 100 meter sebelum pukul 17.00 pada hari kerja.
- Pengguna memasuki rentang beacon BLE tertentu.
Contoh berikut menunjukkan cara menentukan pagar yang diaktifkan setiap kali pengguna berjalan:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
Setelah menentukan pagar, Anda harus melakukan hal berikut:
- Panggil
updateFences
untuk mendaftarkan pagar guna menerima callback. - Tentukan callback yang dapat dipanggil saat status pagar berubah.
Contoh berikut menunjukkan metode yang membuat dan mendaftarkan pagar. Dalam
contoh ini, subclass kustom BroadcastReceiver
digunakan untuk menangani
intent saat pagar dipicu.
Awareness.getFenceClient(this).updateFences(new FenceUpdateRequest.Builder()
.addFence(FENCE_KEY, exercisingWithHeadphonesFence, mPendingIntent)
.build())
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.i(TAG, "Fence was successfully registered.");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.e(TAG, "Fence could not be registered: " + e);
}
});
public class FenceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
FenceState fenceState = FenceState.extract(intent);
if (TextUtils.equals(fenceState.getFenceKey(), FENCE_KEY)) {
String fenceStateStr;
switch (fenceState.getCurrentState()) {
case FenceState.TRUE:
fenceStateStr = "true";
break;
case FenceState.FALSE:
fenceStateStr = "false";
break;
case FenceState.UNKNOWN:
fenceStateStr = "unknown";
break;
default:
fenceStateStr = "unknown value";
}
mLogFragment.getLogView().println("Fence state: " + fenceStateStr);
}
}
}