Yayınla ve Abone Ol

Yakındaki Mesajlar, yakındaki cihazların küçük veri yükleri alışverişi yapmasına olanak tanıyan bir yayınlama-abonelik API'sidir. Bir cihaz mesaj yayınladığında yakındaki cihazlar bu mesajı alabilir. Bu kılavuz, Nearby Messages API'yi kullanarak mesaj yayınlamak ve mesajlara abone olmak için uygulamanızın kullanması gereken tüm işlevleri adım adım açıklar.

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

Bir uygulama, cihaz keşfi için kullanılan ortamlar grubunu ve ortamların jeton yayınlamak ve/veya jeton taramak için kullanılıp kullanılmadığını kontrol edebilir. Varsayılan olarak, yayın ve tarama tüm ortamlarda yapılır. Bir alt küme veya ortamda keşif yapmak ve yayınlama ya da tarama işlemlerini kontrol etmek için yayın ve abonelik oluştururken ek parametreler iletmeniz gerekir.

Etkin olarak yayın yaparken ve abone olurken "Yakındakiler kullanılıyor" bildirimi gösterilir. Bu bildirim, kullanıcılara Yakındakiler'in etkin olduğunu bildirir. Bu bildirim yalnızca bir veya daha fazla uygulama Yakın'ı etkin olarak kullandığında gösterilir. Böylece, Yakın'a ihtiyaç duyulmadığı durumlarda kullanıcılar pil ömrünü koruyabilir. Kullanıcılara aşağıdaki seçenekleri sunar:

  • Yakınlardaki özelliğini devre dışı bırakmak için bir uygulamaya gidin.
  • Bir uygulamayı Yakındakiler özelliğini kullanmayı bırakmaya zorlama
  • Yakındaki cihaz ayarları ekranına gidin.

Kullanıcının uygulamayı Yakın'ı kullanmayı durdurmaya zorladığı durumları dinlemek için PublishCallback() ve SubscribeCallback() kullanabilirsiniz. Bu durumda onExpired() yöntemi tetiklenir.

Yakındaki Mesajlar API'leri pil ömrünü etkileyebileceğinden yalnızca bir ö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() numaralı telefonu arayın. Uygulamanız her zaman unpublish() ve unsubscribe() olarak onStop() 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

Mesaj yayınlamak için Nearby.getMessagesClient(Activity).publish() işlevini çağırıp mesajınızın bayt dizisini iletin. İletilerin 3 KB'tan küçük olmasını öneririz. Bu iletiler daha hızlı iletilebilir. Ancak, ihtiyaç duyan uygulamalar için 100 KB'a kadar destek sunabiliriz. Bu hizmet, fotoğraf ve video gibi daha büyük nesnelerin paylaşılması için tasarlanmamıştır.

Kullanılacak stratejiyi ayarlamak için isteğe bağlı olarak PublishOptions.setStrategy() işlevini çağırabilirsiniz.

Aşağıdaki örnekte, kısa bir metin mesajı göndermek için publish() işlevinin nasıl çağrılacağı gösterilmektedir:

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

Mesajı yayından kaldırma

Bir mesajı yayından kaldırmak için unpublish() numaralı telefonu arayın. Uygulamanız, onStop() yönteminde yayından kaldırma işlemini çağırmalıdır. Yayınlamak için kullanılan Message nesnesini (bu örnekte mActiveMessage) iletin.

Aşağıdaki kod örneğinde unpublish() işlevinin nasıl çağrılacağı 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() numarasını arayın. Abone olunan iletilerin alınmasını işlemek için MessageListener geçmeniz gerekir.

Kullanılacak stratejiyi ayarlamak için isteğe bağlı olarak 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ı almayı durdurmak için Nearby.getMessagesClient(Activity).unsubscribe() işlevini çağırın. Abonelik için kullanılan aynı MessageListener nesneyi (bu örnekte mMessageListener) iletin.

Aşağıdaki kod örneğinde e-posta listesinden çıkma işlemi gösterilmektedir:

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