Yayınla ve Abone Ol

Yakındaki Mesajlar, yakındaki cihazların az miktarda veri alışverişinde bulunmasını sağlayan bir yayınlama abonesi API'sidir. Bir cihaz mesaj yayınladığında yakındaki cihazlar mesajı alabilir. Bu kılavuz, mesaj yayınlamak ve Nearby Messages API'yi kullanarak mesajlara abone olmak için uygulamanızın uygulaması gereken tüm işlevler konusunda size yol gösterir.

Yakındaki cihazlar, Bluetooth üzerinden küçük jetonların değişimiyle belirlenir. Bir cihaz yakındaki bir cihazdan jeton algıladığında jetonu doğrulayıp uygulamanın mevcut abonelik grubu için iletilecek herhangi bir mesaj olup olmadığını kontrol etmek amacıyla Yakındaki Mesajlar sunucusuna gönderir.

Bir uygulama, cihaz keşfi için kullanılan aracı grubunu ve ortamların jeton yayınlamak ve/veya jeton taraması yapmak 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 aracılar üzerinde keşif yapmak ve yayın ya da tarama yapmak isteyip istemediğinizi kontrol etmek için yayınlar ve abonelikler oluştururken ek parametreler iletmeniz gerekir.

Etkin bir şekilde yayınlarken ve abone olurken, kullanıcılara Etrafımda özelliğinin etkin olduğu konusunda bilgi veren "Etrafımda özelliği kullanılıyor" bildirimi gösterilir. Bu bildirim yalnızca bir veya daha fazla uygulama Etrafımda özelliğini aktif olarak kullanırken gösterilir. Böylece, Etrafımda özelliği gerekli olmadığında kullanıcılara pil ömründen tasarruf etme fırsatı sunulur. Kullanıcılara aşağıdaki seçenekleri sunar:

  • Etrafımda özelliğini devre dışı bırakmak için bir uygulamaya gidin.
  • Bir uygulamayı Etrafımda özelliğini kullanmayı durdurmaya zorlayın.
  • Etrafımdaki Ayarlar ekranına gidin.

Kullanıcının uygulamayı Etrafımda özelliğini kullanmayı bırakmaya zorladığı durumları dinlemek için PublishCallback() ve SubscribeCallback() araçlarını kullanabilirsiniz. Böyle bir durumda onExpired() yöntemi tetiklenir.

Yakındaki Mesajlar API'lerinin pil ömrünü etkileme potansiyeli olduğundan, yalnızca ön plan etkinliğinde kullanılmalıdır (BLE arka planda abone olma hariç).

Nearby Messages API'yi kullanmak için publish() ve/veya subscribe() numaralı telefonu arayın. Uygulamanız her zaman onStop() içinde unsubscribe() ve simetrik olarak unpublish() 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 dizinizi ileten Nearby.getMessagesClient(Activity).publish() çağrısı yapın. Mesajların 3 KB'tan küçük olmasını öneririz. Bu tür mesajları daha hızlı iletebiliriz, ancak gereken uygulamalar için 100 KB'a kadar destek sağlayabiliriz. Bu hizmet, fotoğraf ve video gibi daha büyük nesnelerin alışverişi için tasarlanmamıştır.

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

Aşağıdaki örnekte, küçük bir kısa mesaj göndermek için publish() yönteminin çağrılması 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 en azından onStop() yönteminde yayından kaldırma işlemini çağırmalıdır. Yayınlamak için kullanılan Message nesnesinin aynısını geçirin (bu örnekte mActiveMessage).

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 iletileri almak için bir MessageListener iletmeniz gerekir.

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

Aşağıdaki örnekte mesajlara abone olma 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);
}

E-posta listesinden çık

E-posta listesinden çıkmak ve cihaz mesajları almayı durdurmak için Nearby.getMessagesClient(Activity).unsubscribe() numaralı telefonu arayın. Abone olmak için kullanılan MessageListener nesnesinin aynısını iletin (bu örnekte mMessageListener).

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

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