Uygulamanız Bluetooth Düşük Enerji (BLE) işaretçi eklerine abone olabilir tarafından yayınlanan iletilere abone olmak için kullanılan mekanizmanın aynısını yakındaki diğer cihazlar. Abone olduğunuzda, uygulamanız otomatik olarak ve yakındaki cihazlardan gelen mesajları gönderir.
BLE işaretçi mesajlarına abone olun
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.
Hangi ad alanlarının projenizle ilişkilendirilmiş olduğunu öğrenmek için şunu çağırın: namespaces.list alan adları için geçerlidir.
Notlar:
-
Pil ömrünü korumak için
Nearby.getMessagesClient(Activity).unsubscribe()
numaralı telefonu arayın etkinliğinizinonStop()
işlevinde. Bu yalnızca aşağıdaki durumlarda geçerli olur: ön planda abone olmanız gerekir. -
Gecikmeyi azaltmak için
Nearby.getMessagesClient(Activity).subscribe()
çağrısı yaparkenStrategy.BLE_ONLY
seçeneğini kullanın. Bu seçenek ayarlandığında Nearby Messages API'si klasik Bluetooth'u tetiklemez emin olun. Bu, sistemin herhangi bir nedenle tüm olası tarama türlerinde geçiş yapmaz. - Bir işaretçiye mesaj yükü eklemek için Proximity Beacon API.