Loại thông báo
Theo mặc định, một thuê bao sẽ tìm thấy tất cả các thông báo liên kết với dự án Google Cloud Console của ứng dụng. Điều này bao gồm:
- Tin nhắn do cùng một ứng dụng xuất bản trên một thiết bị khác.
- Thông báo thuộc dự án đó, được đính kèm vào các đèn hiệu. Xem phần Thêm tệp đính kèm vào Beacon.
Ứng dụng của bạn có thể dùng MessageFilter
để đăng ký nhận thêm các loại thông báo lân cận, bao gồm cả tệp đính kèm đèn hiệu công khai và mã nhận dạng đèn hiệu Bluetooth năng lượng thấp (BLE) thô.
Tệp đính kèm đèn hiệu công khai
Nhà phát triển có thể đánh dấu không gian tên tệp đính kèm của beacon là PUBLIC
. Điều này cho phép tất cả các ứng dụng truy xuất các giá trị này, bất kể Dự án Cloud Console của chúng. Để biết thông tin về cách công khai không gian tên tệp đính kèm, hãy xem phần Chế độ hiển thị tệp đính kèm.
Ví dụ:
// Subscribe for two different public beacon attachment types.
MessageFilter messageFilter = new MessageFilter.Builder()
.includeNamespacedType(EXAMPLE_PUBLIC_NAMESPACE_A, EXAMPLE_PUBLIC_TYPE_A)
.includeNamespacedType(EXAMPLE_PUBLIC_NAMESPACE_B, EXAMPLE_PUBLIC_TYPE_B)
.build();
SubscribeOptions options = new SubscribeOptions.Builder()
.setStrategy(Strategy.BLE_ONLY)
.setFilter(messageFilter)
.build();
MessageListener messageListener = new MessageListener() {
@Override
public void onFound(final Message message) {
// We may want to handle the two types of message differently.
if (EXAMPLE_PUBLIC_NAMESPACE_A.equals(message.getNamespace())
&& EXAMPLE_PUBLIC_TYPE_A.equals(message.getType())) {
// Handle a "type A" message.
} else if (EXAMPLE_PUBLIC_NAMESPACE_B.equals(message.getNamespace())
&& EXAMPLE_PUBLIC_TYPE_B.equals(message.getType())) {
// Handle a "type B" message.
}
}
};
Nearby.getMessagesClient(this).subscribe(messageListener, options);
Mã hiệu BLE
Bạn có thể sử dụng nền tảng beacon của Google để đính kèm dữ liệu tuỳ ý trên đám mây vào các beacon của mình, tách biệt các mã nhận dạng beacon thực tế được quảng cáo trong các gói BLE. Theo mặc định, các tệp đính kèm này sẽ được phát hiện (xem phần Các loại thông báo).
Tuy nhiên, nếu cần khám phá mã nhận dạng thô của beacon (ví dụ: để sử dụng sổ đăng ký beacon của riêng bạn), bạn có thể làm như vậy. Hiện có hai định dạng được hỗ trợ:
- UID Eddystone.
- Tìm những nội dung này bằng
MessageFilter.Builder#includeEddystoneUids
.
- Tìm những nội dung này bằng
- Mã nhận dạng iBeacon.
- Tìm những nội dung này bằng
MessageFilter.Builder#includeIBeaconIds
.
- Tìm những nội dung này bằng
Ví dụ:
// Subscribe for all Eddystone UIDs whose first 10 bytes (the "namespace")
// match MY_EDDYSTONE_UID_NAMESPACE.
//
// Note that the Eddystone UID namespace is separate from the namespace
// field of a Nearby Message.
MessageFilter messageFilter = new MessageFilter.Builder()
.includeEddystoneUids(MY_EDDYSTONE_UID_NAMESPACE, null /* any instance */)
.build();
SubscribeOptions options = new SubscribeOptions.Builder()
.setStrategy(Strategy.BLE_ONLY)
.setFilter(messageFilter)
.build();
MessageListener messageListener = new MessageListener() {
@Override
public void onFound(final Message message) {
// Note: Checking the type shown for completeness, but is unnecessary
// if your message filter only includes a single type.
if (Message.MESSAGE_NAMESPACE_RESERVED.equals(message.getNamespace())
&& Message.MESSAGE_TYPE_EDDYSTONE_UID.equals(message.getType())) {
// Nearby provides the EddystoneUid class to parse Eddystone UIDs
// that have been found nearby.
EddystoneUid eddystoneUid = EddystoneUid.from(message);
Log.i(TAG, "Found Eddystone UID: " + eddystoneUid);
}
}
};
Nearby.getMessagesClient(this).subscribe(messageListener, options);
Lệnh gọi lại RSSI và khoảng cách
Ngoài các lệnh gọi lại tìm thấy và bị mất, một gói thuê bao ở nền trước có thể cập nhật MessageListener khi Nearby có thông tin mới về tín hiệu BLE được liên kết với một thông báo.
- Những lệnh gọi lại bổ sung này hiện chỉ được gửi cho các thông báo của BLE beacon (cả tệp đính kèm và mã nhận dạng beacon).
- Những lệnh gọi lại bổ sung này không được gửi đến các hoạt động đăng ký ở chế độ nền (
PendingIntent
).
Ví dụ:
MessageListener messageListener = new MessageListener() {
/**
* Called when a message is discovered nearby.
*/
@Override
public void onFound(final Message message) {
Log.i(TAG, "Found message: " + message);
}
/**
* Called when the Bluetooth Low Energy (BLE) signal associated with a message changes.
*
* This is currently only called for BLE beacon messages.
*
* For example, this is called when we see the first BLE advertisement
* frame associated with a message; or when we see subsequent frames with
* significantly different received signal strength indicator (RSSI)
* readings.
*
* For more information, see the MessageListener Javadocs.
*/
@Override
public void onBleSignalChanged(final Message message, final BleSignal bleSignal) {
Log.i(TAG, "Message: " + message + " has new BLE signal information: " + bleSignal);
}
/**
* Called when Nearby's estimate of the distance to a message changes.
*
* This is currently only called for BLE beacon messages.
*
* For more information, see the MessageListener Javadocs.
*/
@Override
public void onDistanceChanged(final Message message, final Distance distance) {
Log.i(TAG, "Distance changed, message: " + message + ", new distance: " + distance);
}
/**
* Called when a message is no longer detectable nearby.
*/
@Override
public void onLost(final Message message) {
Log.i(TAG, "Lost message: " + message);
}
};