3. 程式說明 - iii-bolinli/Beacon-Content GitHub Wiki
本 SDK 主體為一背景執行服務,從啟動服務到獲得 Beacon 資料與推播資訊的過程如下:
- 建立
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. 功能與物件說明
}
};
...
}
- 初始化 SDK 物件,並註冊監聽,將剛剛寫好的 broadcastReceiver 傳入
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
openAlarm = new OpenAlarm(BeaconListActivity.this);
//註冊監聽 broadcast
registerReceiver(broadcastReceiver, new IntentFilter("beaconDetect"));
}
- 啟動 SDK
openAlarm.getSdkData(server_ip, app_key, 180 * 1000);
openAlarm.startSdkService();
- 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 進行查詢
}
};
- 查詢推播資訊,傳入一開始設定的 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());
}
- 使用以下指令結束 SDK
openAlarm.stopSdkService();