İşaretçi Mesajları Alın

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: