Uygulamanız, yakındaki diğer cihazlar tarafından yayınlanan mesajlara abone olmak için kullanılan mekanizmayı kullanarak Bluetooth Düşük Enerji (BDE) işaretçi eklerine abone olabilir. Abone olduğunuzda uygulamanız, hem işaretçilerden hem de yakındaki cihazlardan otomatik olarak mesaj alır.
BDE işaretçi mesajlarına abone ol
Uygulamanızın BLE işaretçi mesajlarına abone olabileceği iki yöntem vardır:
- Ön planda, kullanıcı işlemine veya etkinliğe yanıt olarak.
- Arka planda, uygulamanızın çalışmadığı durumlarda.
Ön planda abone olma
Uygulamanız ön plandaki işaretçi mesajlarına abone olduğunda taramalar, uygulamanız abonelikten çıkana kadar kesintisiz olarak gerçekleştirilir. Ön plan aboneliğini yalnızca uygulamanız etkin olduğunda (genellikle bir kullanıcı işlemine yanıt olarak) başlatın.
Uygulamanız Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions)
yöntemini çağırıp Strategy
seçeneğini BLE_ONLY
olarak ayarlayarak ön plan aboneliği başlatabilir.
Aşağıdaki kod snippet'i, bir ön plan aboneliğin başlatıldığını gösterir
Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions)
:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
mMessageListener = new MessageListener() {
@Override
public void onFound(Message message) {
Log.d(TAG, "Found message: " + new String(message.getContent()));
}
@Override
public void onLost(Message message) {
Log.d(TAG, "Lost sight of message: " + new String(message.getContent()));
}
}
}
// Subscribe to receive messages.
private void subscribe() {
Log.i(TAG, "Subscribing.");
SubscribeOptions options = new SubscribeOptions.Builder()
.setStrategy(Strategy.BLE_ONLY)
.build();
Nearby.getMessagesClient(this).subscribe(mMessageListener, options);
}
Abonelik artık gerekli olmadığında uygulamanızın Nearby.getMessagesClient(Activity).unsubscribe(MessageListener)
numarasını arayarak aboneliğinizi iptal etmesi gerekir.
Arka planda abone olun
Uygulamanız arka plandaki işaretçi mesajlarına abone olduğunda, ekran etkin etkinliklerde uygulamanız henüz etkin olmasa bile düşük güçlü taramalar tetiklenir. Bu tarama bildirimlerini belirli bir mesaja yanıt olarak uygulamanızı "uyandırmak" için kullanabilirsiniz. Arka plan abonelikleri, ön plan aboneliklerinden daha az güç tüketir ancak daha yüksek gecikme ve güvenilirlik sunar.
Uygulamanız Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions)
numaralı telefonu arayıp Strategy
seçeneğini BLE_ONLY
olarak ayarlayarak bir arka plan aboneliği başlatabilir.
Aşağıdaki kod snippet'i, Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions)
çağırarak bir arka plan aboneliğin başlatıldığını gösterir.
// Subscribe to messages in the background.
private void backgroundSubscribe() {
Log.i(TAG, "Subscribing for background updates.");
SubscribeOptions options = new SubscribeOptions.Builder()
.setStrategy(Strategy.BLE_ONLY)
.build();
Nearby.getMessagesClient(this).subscribe(getPendingIntent(), options);
}
private PendingIntent getPendingIntent() {
return PendingIntent.getBroadcast(this, 0, new Intent(this, BeaconMessageReceiver.class),
PendingIntent.FLAG_UPDATE_CURRENT);
}
Aşağıdaki kod snippet'i, BeaconMessageReceiver
sınıfında niyeti işlemeyi göstermektedir.
@Override
public void onReceive(Context context, Intent intent) {
Nearby.getMessagesClient(context).handleIntent(intent, new MessageListener() {
@Override
public void onFound(Message message) {
Log.i(TAG, "Found message via PendingIntent: " + message);
}
@Override
public void onLost(Message message) {
Log.i(TAG, "Lost message via PendingIntent: " + message);
}
});
}
Abonelik artık gerekli olmadığında uygulamanızın Nearby.getMessagesClient(Activity).unsubscribe(PendingIntent)
numarasını arayarak aboneliğinizi iptal etmesi gerekir.
İşaretçi mesajlarını ayrıştırın
İşaretçi ekleri, işaretçilere ekleyebileceğiniz rastgele verilerin bloblarıdır. Her ek aşağıdaki bölümlerden oluşur:
- Ad alanı: Ad alanı tanımlayıcısı.
- Tür: Veri türü.
- Veri: Ekin veri değeri.
Aşağıdaki kod snippet'i, bir BLE işaretçisinden alınan mesajları ayrıştırmak için bir mesaj dinleyici kullanmayı göstermektedir:
mMessageListener = new MessageListener() {
@Override
public void onFound(Message message) {
// Do something with the message here.
Log.i(TAG, "Message found: " + message);
Log.i(TAG, "Message string: " + new String(message.getContent()));
Log.i(TAG, "Message namespaced type: " + message.getNamespace() +
"/" + message.getType());
}
...
};
İçeriğin ayrıştırılması, baytların biçimine bağlıdır. Bu örnekte, içerik baytlarının bir UTF-8 dizesini kodladığı varsayılır ancak işaretçi mesajınız diğer bayt biçimlerini (örneğin, serileştirilmiş protokol arabelleği) kodlayabilir. Daha fazla bilgi edinmek için İşaretçilere Ek Ekleme başlıklı makaleyi inceleyin.
Projenizle hangi ad alanlarının ilişkili olduğunu öğrenmek için namespaces.list çağrısı yapın.
Notlar:
-
Pil ömrünü korumak için Etkinliğinizin
onStop()
işlevindeNearby.getMessagesClient(Activity).unsubscribe()
numarasını arayın. Bunun yalnızca ön planda abone olduğunuzda geçerli olduğunu unutmayın. -
Gecikmeyi azaltmak için
Nearby.getMessagesClient(Activity).subscribe()
çağrılırkenStrategy.BLE_ONLY
seçeneğini kullanın. Bu seçenek ayarlandığında, Nearby Messages API, klasik Bluetooth taramalarını tetiklemez. Sistem, olası tüm tarama türlerini incelemediğinden, bu sayede işaretçi algılamada gecikme artar. - Bir işaretçiye mesaj yükü eklemek için Proximity Beacon API'yi kullanın.