取得信標訊息

您的應用程式可訂閱藍牙低功耗 (BLE) 信標附件 使用的機制與訂閱 和其他鄰近裝置。訂閱時,您的應用程式會自動接收 都有來自信標和附近裝置的訊息。

訂閱 BLE 信標訊息

應用程式可以透過兩種方式訂閱 BLE 信標訊息:

  • 前景中,回應使用者動作 或事件
  • 在「背景」中,當應用程式於 而不是執行中

在前景訂閱

如果您的應用程式在前景訂閱信標訊息,掃描作業會 持續互動,直到應用程式取消訂閱為止。只啟動前景 訂閱項目 (通常是為了回應使用者動作)。

應用程式可透過呼叫的方式啟動前景訂閱 Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions)敬上 並將 Strategy 選項設為 BLE_ONLY

下列程式碼片段展示啟動前景訂閱 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);
}

不再需要訂閱時,應用程式應取消訂閱 撥號 Nearby.getMessagesClient(Activity).unsubscribe(MessageListener)

在背景中訂閱

應用程式在背景訂閱信標訊息時,低功耗掃描 就算應用程式目前並非使用中狀態,也會觸發這個事件。 你可以使用這些掃描通知「起床」能回應 特定訊息。背景訂閱耗電量少於 但延遲時間較長且穩定性較低

您的應用程式可以透過呼叫 Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions)敬上 並將 Strategy 選項設為 BLE_ONLY

下列程式碼片段示範如何透過 撥號中 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);
}

下列程式碼片段示範如何處理 BeaconMessageReceiver 類別。

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

不再需要訂閱時,應用程式應取消訂閱 撥號 Nearby.getMessagesClient(Activity).unsubscribe(PendingIntent)

剖析信標訊息

信標附件 是任意資料的 blob,可以新增至信標。 每個附件都包含以下部分:

  • 命名空間:命名空間 ID。
  • 類型:資料類型。
  • 資料:附件的資料值。

下列程式碼片段示範如何使用訊息事件監聽器剖析 從 BLE 信標收到的訊息:

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

    ...
};

剖析內容視位元組的格式而定。這個範例假設 內容位元組會將 UTF-8 字串編碼,但您的信標訊息可以 編碼其他位元組格式 (例如序列化的通訊協定緩衝區)。 詳情請參閱「新增信標的附件」。

如要瞭解與專案相關聯的命名空間,請呼叫 namespaces.list

附註: