3. 程式說明 - iii-bolinli/Beacon-Content GitHub Wiki

本 SDK 主體為一背景執行服務,從啟動服務到獲得 Beacon 資料與推播資訊的過程如下:

  1. 建立 BroadcastReceiver 本例中名稱為 broadcastReceiver,並定義後續會使用的相關參數與資料結構物件。
public class MainActivity extends AppCompatActivity {
  ...
  // Step 1. create ResultReceiver to receive result from the scan
  ServiceResultReceiver scanWithKeyReceiver;
  String server_ip = "target-server"; // e.g. ideas.iiibeacon.net
  String app_key = "your-app-key"; // e.g. 36101de29093fad767e5b1a751036bccf37f3580

  Push_message push_message;  // 推播資訊
  private OpenAlarm openAlarm; // SDK 物件
  ...
  private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
        // 偵測到 Beacon 之後要做的事情
        // 回傳資料的詳細說明請參考 5. 功能與物件說明
      }
  };
  ...
}
  1. 初始化 SDK 物件,並註冊監聽,將剛剛寫好的 broadcastReceiver 傳入
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);

   openAlarm = new OpenAlarm(BeaconListActivity.this);
   //註冊監聽 broadcast
   registerReceiver(broadcastReceiver, new IntentFilter("beaconDetect"));
}
  1. 啟動 SDK
openAlarm.getSdkData(server_ip, app_key, 180 * 1000);
openAlarm.startSdkService();
  1. SDK 啟動之後會在 BroadcastReceiver 中獲得 Beacon 資料,取得回傳 Beacon 的 ID 或 UUID 之後即可查詢推播資訊。

回傳資料格式可以參考 功能與物件說明

此外行動裝置與 Beacon 之間的距離也能透過回傳資料中 getDouble("distance") 這個方法來取得,距離是由 txPower 與 RSSI 換算而來,單位為公尺。

  private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        final String beacon_id = bundle.getString("id");
        final String beacon_uuid = bundle.getString("uuid");
        final String beacon_distance = String.format("%.2f", bundle.getDouble("distance"));

        // 開始查詢推播資訊,詳細說明看下面
        BeaconContent BC = new BeaconContent(server_ip);
        push_message = BC.beaconContentByBeaconID(beacon_uuid, app_key); // 使用 ID 進行查詢
      }
  };
  1. 查詢推播資訊,傳入一開始設定的 Server IP, APP Key 以及剛剛獲得的 ID 或 UUID 進行這顆 Beacon 的推播資訊查詢,詳細的推播資訊結構可以參考功能與物件說明,在此我們先以查詢優惠卷圖片路徑為範例。
  BeaconContent BC = new BeaconContent(server_ip);
  push_message = BC.beaconContent(beacon_uuid, app_key); // 使用 UUID 進行查詢
  //or
  //push_message = BC.beaconContentByBeaconID(target_beacon_id, app_key); // 使用 ID 進行查詢

  Result_content = push_message.getResult_content();
  List<Coupons> Coupons = Result_content.getCoupons();

  for(int i = 0; i<Coupons.size() ;i++){
    System.out.println("photoUrl:"+Coupons.get(i).getPhotoUrl());
  }
  1. 使用以下指令結束 SDK
  openAlarm.stopSdkService();
⚠️ **GitHub.com Fallback** ⚠️