取得信標訊息

您的應用程式可訂閱藍牙低功耗 (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

附註: