在 Android 12 beta5 上无法检测到带有附近消息 API 的信标
Can't detect beacons with Nearby Messages API on Android 12 beta5
我正在尝试在 Android 12 beta 5 上使用附近消息 API 检测信标。我按照 doc 中的描述做了所有事情。我的应用程序仅用于检测信标。在 android 12 以下的版本中,一切正常,但在 android 12 中,我遇到了困难。我检查了所有权限。我也可以在附近的应用程序设备列表中看到我的应用程序。我可以在同一 phone 上扫描第 3 方应用程序中的信标。也许其他人也遇到了这个问题,可以帮助我。
这是我的代码:
清单 -
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
.......
<meta-data
android:name="com.google.android.nearby.messages.API_KEY"
android:value="@string/nearby_api_key" />
.....
其中 nearby_api_key 取自 Google Play 管理中心。
Activity class 相关代码:
fun getMessagesClient(): MessagesClient {
if (messageClient == null) {
messageClient = Nearby.getMessagesClient(this, MessagesOptions.Builder()
.setPermissions(NearbyPermissions.BLE)
.build())
}
return messageClient!!
}
val statusCallback = object : StatusCallback() {
override fun onPermissionChanged(p0: Boolean) {
super.onPermissionChanged(p0)
//all permissions are given
startScan()
}
}
private fun getSubscribeOptions(): SubscribeOptions {
val messageFilter = MessageFilter.Builder()
.includeIBeaconIds(Identifiers.beaconType1Uuid, null, null)
.includeIBeaconIds(Identifiers.beaconType2Uuid, null, null)
.includeAllMyTypes()
.build()
val options = SubscribeOptions.Builder()
.setStrategy(Strategy.BLE_ONLY)
.setFilter(messageFilter)
.setCallback(object : SubscribeCallback() {
override fun onExpired() {
Log.v(TAG, "options onExpired")
}
})
.build()
return options
}
private fun startScan() {
getMessagesClient()
.subscribe(beaconMessageListener, getSubscribeOptions()) // Do NOT receive messages within this callback
.addOnSuccessListener {
Log.d(TAG, "subscribe on Success")
}
.addOnFailureListener {
Log.d(TAG, "subscribe on Fail $it")
}
}
val beaconMessageListener = object : MessageListener() {
override fun onFound(message: Message) { // Is not called
super.onFound(message)
message?.let {
onFoundBeacon(it)
}
}
override fun onLost(message: Message) {
super.onLost(message)
message?.let {
onLostBeacon(it)
}
}
override fun onDistanceChanged(message: Message, distance: Distance) {
super.onDistanceChanged(message, distance)
message?.let {
onBeaconDistanceChanged(message, distance)
}
}
override fun onBleSignalChanged(p0: Message, p1: BleSignal) {
super.onBleSignalChanged(p0, p1)
Log.i(LogTag.BEACON, "onBleSignalChanged $p0 ,\nisStarted() $isStarted\nBleSignal $p1")
}
}
在build.gradle
implementation 'com.google.android.gms:play-services-nearby:18.0.0'
非常感谢!
也许我会为某人节省一些时间,所以:
根据https://developers.google.com/nearby/messages/android/get-beacon-messages
Google 信标平台已于 2020 年 12 月 7 日弃用。该平台将于 2021 年 4 月 1 日关闭。关闭后,附近消息将不再支持信标 API.
我正在尝试在 Android 12 beta 5 上使用附近消息 API 检测信标。我按照 doc 中的描述做了所有事情。我的应用程序仅用于检测信标。在 android 12 以下的版本中,一切正常,但在 android 12 中,我遇到了困难。我检查了所有权限。我也可以在附近的应用程序设备列表中看到我的应用程序。我可以在同一 phone 上扫描第 3 方应用程序中的信标。也许其他人也遇到了这个问题,可以帮助我。
这是我的代码:
清单 -
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
.......
<meta-data
android:name="com.google.android.nearby.messages.API_KEY"
android:value="@string/nearby_api_key" />
.....
其中 nearby_api_key 取自 Google Play 管理中心。
Activity class 相关代码:
fun getMessagesClient(): MessagesClient {
if (messageClient == null) {
messageClient = Nearby.getMessagesClient(this, MessagesOptions.Builder()
.setPermissions(NearbyPermissions.BLE)
.build())
}
return messageClient!!
}
val statusCallback = object : StatusCallback() {
override fun onPermissionChanged(p0: Boolean) {
super.onPermissionChanged(p0)
//all permissions are given
startScan()
}
}
private fun getSubscribeOptions(): SubscribeOptions {
val messageFilter = MessageFilter.Builder()
.includeIBeaconIds(Identifiers.beaconType1Uuid, null, null)
.includeIBeaconIds(Identifiers.beaconType2Uuid, null, null)
.includeAllMyTypes()
.build()
val options = SubscribeOptions.Builder()
.setStrategy(Strategy.BLE_ONLY)
.setFilter(messageFilter)
.setCallback(object : SubscribeCallback() {
override fun onExpired() {
Log.v(TAG, "options onExpired")
}
})
.build()
return options
}
private fun startScan() {
getMessagesClient()
.subscribe(beaconMessageListener, getSubscribeOptions()) // Do NOT receive messages within this callback
.addOnSuccessListener {
Log.d(TAG, "subscribe on Success")
}
.addOnFailureListener {
Log.d(TAG, "subscribe on Fail $it")
}
}
val beaconMessageListener = object : MessageListener() {
override fun onFound(message: Message) { // Is not called
super.onFound(message)
message?.let {
onFoundBeacon(it)
}
}
override fun onLost(message: Message) {
super.onLost(message)
message?.let {
onLostBeacon(it)
}
}
override fun onDistanceChanged(message: Message, distance: Distance) {
super.onDistanceChanged(message, distance)
message?.let {
onBeaconDistanceChanged(message, distance)
}
}
override fun onBleSignalChanged(p0: Message, p1: BleSignal) {
super.onBleSignalChanged(p0, p1)
Log.i(LogTag.BEACON, "onBleSignalChanged $p0 ,\nisStarted() $isStarted\nBleSignal $p1")
}
}
在build.gradle
implementation 'com.google.android.gms:play-services-nearby:18.0.0'
非常感谢!
也许我会为某人节省一些时间,所以:
根据https://developers.google.com/nearby/messages/android/get-beacon-messages
Google 信标平台已于 2020 年 12 月 7 日弃用。该平台将于 2021 年 4 月 1 日关闭。关闭后,附近消息将不再支持信标 API.