İşaretçi Mesajları Alın

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 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: