Yayınla ve Abone Ol

Nearby Messages, yakındaki cihazların küçük veri yükleri alışverişi yapmasına olanak tanıyan bir yayınlama-abone olma API'sidir. Bir cihaz mesaj yayınladığında yakındaki cihazlar mesajı alabilir. Bu kılavuzda, uygulamanızın Mesajlar Yakınında API'sini kullanarak mesaj yayınlamak ve mesajlara abone olmak için uygulamanız gereken tüm işlevler açıklanmaktadır.

Yakındaki cihaz grubu, Bluetooth üzerinden küçük jetonların paylaşılmasıyla belirlenir. Bir cihaz, yakındaki bir cihazdan jeton algıladığında jetonu doğrulamak ve uygulamanın mevcut abonelik grubu için gönderilecek mesaj olup olmadığını kontrol etmek üzere Yakındaki Mesajlar sunucusuna gönderir.

Uygulamalar, cihaz bulma için kullanılan medya grubunu ve bu medyanın jeton yayınlamak ve/veya jeton taramak için kullanılıp kullanılmayacağını kontrol edebilir. Varsayılan olarak yayın ve tarama tüm ortamlarda yapılır. Bir alt küme veya medya üzerinde keşif yapmak ve yayın yapıp yapmayacağınızı kontrol etmek için yayın ve abonelik oluştururken ek parametreler iletmeniz gerekir.

Etkin olarak yayın yaparken ve abone olurken kullanıcılara Etrafımda'nın etkin olduğunu bildiren bir "Etrafımda kullanılıyor" bildirimi gösterilir. Bu bildirim yalnızca bir veya daha fazla uygulama Yakındaki'yi etkin olarak kullandığında gösterilir. Böylece kullanıcılar, Yakındaki'ye ihtiyaç duymadıkları durumlarda pil ömrünü koruma şansı elde eder. Kullanıcılara aşağıdaki seçenekleri sunar:

  • Etrafımda'yı devre dışı bırakmak için bir uygulamaya gidin.
  • Bir uygulamanın Etrafımda'yı kullanmaya son vermesini zorunlu kılın.
  • Yakındaki Ayarlar ekranına gidin.

Kullanıcının uygulamayı Yakındaki'yi kullanmayı bırakması için zorladığı durumları dinlemek üzere PublishCallback() ve SubscribeCallback() etkinliklerini kullanabilirsiniz. Bu durumda onExpired() yöntemi tetiklenir.

Yakındaki Mesajlar API'leri pil ömrünü etkileyebileceğinden yalnızca ön plan etkinliğinden kullanılmalıdır (BLE arka plan aboneliği hariç).

Yakındaki Mesajlar API'sini kullanmak için publish() ve/veya subscribe() API'lerini çağırın. Uygulamanız her zaman onStop()'te simetrik unpublish() ve unsubscribe() olmalıdır.

@Override
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()));
        }
    }

    mMessage = new Message("Hello World".getBytes());
}

@Override
public void onStart() {
    super.onStart();
    ...
    Nearby.getMessagesClient(this).publish(mMessage);
    Nearby.getMessagesClient(this).subscribe(mMessageListener);
}

@Override
public void onStop() {
    Nearby.getMessagesClient(this).unpublish(mMessage);
    Nearby.getMessagesClient(this).unsubscribe(mMessageListener);
    ...
    super.onStop();
}

İleti yayınlayın

Bir mesaj yayınlamak için mesaj bayt dizinini ileterek Nearby.getMessagesClient(Activity).publish() işlevini çağırın. İletilerin 3 KB'tan az olmasını öneririz. Bu iletileri daha hızlı yayınlayabiliriz. Ancak buna ihtiyaç duyan uygulamalar için 100 KB'a kadar destek sunabiliriz. Bu hizmet, fotoğraf ve video gibi daha büyük öğelerin paylaşılması için tasarlanmamıştır.

İsteğe bağlı olarak, kullanılacak stratejiyi ayarlamak için PublishOptions.setStrategy() işlevini çağırabilirsiniz.

Aşağıdaki örnekte, küçük bir metin mesajı göndermek için publish() çağrısı gösterilmektedir:

private void publish(String message) {
    Log.i(TAG, "Publishing message: " + message);
    mActiveMessage = new Message(message.getBytes());
    Nearby.getMessagesClient(this).publish(mActiveMessage);
}

Mesajları yayından kaldırma

Bir mesajın yayınını kaldırmak için unpublish() simgesini tıklayın. Uygulamanız en azından onStop() yönteminde unpublish'i çağırmalıdır. Yayınlamak için kullanılan Message öğesini (bu örnekte mActiveMessage) iletin.

Aşağıdaki kod örneğinde unpublish() çağrısı gösterilmektedir:

private void unpublish() {
    Log.i(TAG, "Unpublishing.");
    if (mActiveMessage != null) {
        Nearby.getMessagesClient(this).unpublish(mActiveMessage);
        mActiveMessage = null;
    }
}

Mesajlara abone olma

Diğer cihazlardan gelen mesajlara abone olmak için Nearby.getMessagesClient(Activity).subscribe() numaralı telefonu arayın. Abone olunan mesajları almak için bir MessageListener iletmeniz gerekir.

İsteğe bağlı olarak, kullanılacak stratejiyi ayarlamak için SubscribeOptions.setStrategy() işlevini çağırabilirsiniz.

Aşağıdaki örnekte mesajlara abone olma işlemi gösterilmektedir:

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.");
    Nearby.getMessagesClient(this).subscribe(mMessageListener, options);
}

Aboneliği iptal et

Abonelikten çıkmak ve cihaz mesajlarını almamak için Nearby.getMessagesClient(Activity).unsubscribe() numaralı telefonu arayın. Abone olmak için kullanılan MessageListener nesnesini (bu örnekte mMessageListener) iletin.

Aşağıdaki kod örneğinde, abonelikten çıkma işlemi gösterilmektedir:

private void unsubscribe() {
    Log.i(TAG, "Unsubscribing.");
    Nearby.getMessagesClient(this).unsubscribe(mMessageListener);
}