แอปของคุณสามารถสมัครใช้บริการไฟล์แนบบีคอนบลูทูธพลังงานต่ำ (BLE) ได้ โดยใช้กลไกเดียวกับที่ใช้สมัครรับข้อความที่เผยแพร่โดย อุปกรณ์อื่นๆ ที่อยู่ใกล้เคียง เมื่อสมัครใช้บริการ แอปของคุณจะได้รับ ข้อความจากทั้งบีคอนและอุปกรณ์ใกล้เคียง
สมัครรับข้อความบีคอน BLE
แอปของคุณจะสมัครรับข้อความบีคอน BLE ได้ 2 วิธีดังนี้
- เพื่อตอบสนองต่อการดำเนินการของผู้ใช้ในส่วนเบื้องหน้า หรือกิจกรรม
- ในเบื้องหลัง เมื่อแอป ไม่ทำงาน
สมัครใช้บริการในเบื้องหน้า
เมื่อแอปของคุณสมัครรับข้อความบีคอนในเบื้องหน้า ระบบจะสแกน แสดงอย่างต่อเนื่องจนกว่าแอปของคุณจะยกเลิกการสมัคร เริ่มต้นเฉพาะเบื้องหน้า เมื่อแอปทำงานอยู่ โดยทั่วไปจะตอบสนองต่อการดำเนินการของผู้ใช้
แอปของคุณสามารถเริ่มการสมัครใช้บริการที่ทำงานอยู่เบื้องหน้าได้ด้วยการโทร
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)
แยกวิเคราะห์ข้อความบีคอน
ไฟล์แนบบีคอน คือกลุ่มข้อมูลที่กำหนดเองซึ่งคุณเพิ่มลงในบีคอนได้ ไฟล์แนบแต่ละไฟล์ประกอบด้วยส่วนต่างๆ ต่อไปนี้
- เนมสเปซ: ตัวระบุเนมสเปซ
- ประเภท: ประเภทข้อมูล
- ข้อมูล: ค่าข้อมูลสำหรับไฟล์แนบ
ข้อมูลโค้ดต่อไปนี้สาธิตการใช้ Listener ข้อความในการแยกวิเคราะห์ ข้อความที่ได้รับจากบีคอน 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
หมายเหตุ:
-
หากต้องการยืดอายุการใช้งานแบตเตอรี่ โปรดโทรหา
Nearby.getMessagesClient(Activity).unsubscribe()
ในฟังก์ชันonStop()
ของกิจกรรม โปรดทราบว่าตัวเลือกนี้จะมีผลก็ต่อเมื่อ การสมัครใช้บริการในเบื้องหน้า -
หากต้องการลดเวลาในการตอบสนอง ให้ใช้ตัวเลือก
Strategy.BLE_ONLY
เมื่อโทรหาNearby.getMessagesClient(Activity).subscribe()
เมื่อตั้งค่าตัวเลือกนี้ Nearby Messages API จะไม่เรียกใช้บลูทูธแบบคลาสสิก สแกน ซึ่งช่วยปรับปรุงเวลาในการตอบสนองสำหรับการตรวจหาบีคอนเนื่องจากระบบ สแกนได้ทุกประเภท - ในการแนบเพย์โหลดของข้อความกับบีคอน ให้ใช้ Proximity Beacon API