Uygulamanız, yakındaki diğer cihazlar tarafından yayınlanan mesajlara abone olmak için kullanılan mekanizmayı kullanarak Bluetooth Düşük Enerji (BLE) 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.
BLE işaretçi mesajlarına abone olma
Uygulamanız BLE işaretçi mesajlarına iki şekilde abone olabilir:
- Ön planda, kullanıcı işlemine yanıt olarak belirtir.
- Arka planda, uygulamanız çalışmıyor.
Ön planda abone olma
Uygulamanız ön plandaki işaretçi mesajlarına abone olduğunda taramalar ve abonelikten çıkana kadar sürekli olarak gerçekleştirilir. Yalnızca ön plan başlat abonelik satın almanız gerekir.
Uygulamanız, telefon ederek ön plan aboneliği başlatabilir
Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions)
ve Strategy
seçeneğini BLE_ONLY
olarak ayarlamak istiyorum.
Aşağıdaki kod snippet'i, ön plan aboneliği başlatma işlemini göstermektedir
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 e-posta listesinden çıkması gerekir
telefonla arayarak
Nearby.getMessagesClient(Activity).unsubscribe(MessageListener)
.
Arka planda abone olma
Uygulamanız arka planda işaretçi mesajlarına abone olduğunda, düşük güçlü taramalar Uygulamanız o anda etkin olmasa bile ekran üzerindeki etkinliklerde tetiklenir. Bu tarama bildirimlerini "uyanmak" için kullanabilirsiniz sonucunda uygulamanızın karar vermelisiniz. Arka plan abonelikleri ancak daha yüksek gecikme ve daha düşük güvenilirliğe sahip.
Uygulamanız, şu numarayı arayarak arka plan aboneliği başlatabilir:
Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions)
ve Strategy
seçeneğini BLE_ONLY
olarak ayarlamak istiyorum.
Aşağıdaki kod snippet'i,
arama
Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions)
.
// 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.
@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 e-posta listesinden çıkması gerekir
telefonla arayarak
Nearby.getMessagesClient(Activity).unsubscribe(PendingIntent)
.
İşaretçi mesajlarını ayrıştır
İşaretçi ekleri işaretçilere ekleyebileceğiniz rastgele veri blob'ları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: Ek için veri değeridir.
Aşağıdaki kod snippet'inde, verileri ayrıştırmak için bir mesaj işleyicinin nasıl kullanıldığı gösterilmektedir bir BDE işaretçisinden alınan mesajlar:
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ığını ancak işaretçi mesajınızın diğer bayt biçimlerini (örneğin, serileştirilmiş protokol arabelleği) kodlayın. Daha fazla bilgi için İşaretçilere Ek Ekleme başlıklı makaleye bakın.
Projenizle ilişkili ad alanlarının hangileri olduğunu öğrenmek için namespaces.list işlevini çağırın.
Notlar:
-
Pil ömründen tasarruf etmek için etkinliğinizin
onStop()
işlevindeNearby.getMessagesClient(Activity).unsubscribe()
işlevini çağırın. Bunun yalnızca ön planda abone olurken geçerli olduğunu unutmayın. -
Gecikmeyi azaltmak için
Nearby.getMessagesClient(Activity).subscribe()
'i ararkenStrategy.BLE_ONLY
seçeneğini kullanın. Bu seçenek belirlendiğinde Yakındaki Mesajlar API'si klasik Bluetooth taramalarını tetiklemez. Sistem tüm olası tarama türlerini taramadığı için bu, işaretçi algılama gecikmesini iyileştirir. - Bir mesaj yükü bir işaretçiye eklemek için Yakındaki İşaretçi API'yi kullanın.