我的“附近消息”显然可以在IOS和Android之间愉快地交换消息,但是我的Android应用具有多个“活动”。一旦我切换到第二个活动,消息就会停止。
我已经删除了Android应用中的所有代码,除了“ Neighborhood.getMessagesClient(this).subscribe(listener)”行。
然后我有一个按钮可以切换到同一Activity的新实例。这项工作(从每15秒发送一次消息的IOS应用接收消息)作为第一个活动,但是一旦我单击该按钮并自动启动,它就会失败(没有收到消息)。
请注意,onSuccessListner回调已触发(onFailureListener未被触发)。它认为它已注册,但没有收到任何消息。
我也用相同代码的2个Activity副本进行了此操作,只是为了检查是否不是因为它是相同的Activity类而导致失败。仍然失败。
我带了Google示例应用。这仍然使用不推荐使用的GooglaApiClient。但是,它仍然给出相同的结果。
我确实发现,如果用户必须采取措施来启用消息,则它可以工作(例如在示例中,用户必须打开消息)。因此,我尝试添加一个延迟。延迟400毫秒表示我的设备可以正常工作。 300毫秒,但仍然失败。
所以我似乎有2个选择。在启用消息之前,添加一个虚假的1秒延迟,或者将我的App转换为使用Fragments和单个Activity(我尝试使用Application上下文,但与一些文档相反,我发现它告诉我它一定是Activity Context)。都不是令人满意的解决方法,因此希望我做了一些愚蠢的事情。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
fab.setOnClickListener { view -> // Switch to self.
val intent = Intent(this, MainActivity2::class.java)
startActivity(intent)
}
mMessageListener = object : MessageListener() {
override public fun onFound(message: Message) {
Log.d(TAG, "Found message: " + String(message.content)) //Triggered ok until Activity switch
}
}
}
override public fun onResume() {
super.onResume();
uiScope.launch {// Using coroutines as a simple means of adding a delay. It also fails with no coroutine (and no delay)
delay(300) // This fails - but a value of 400 means that messages are received
Nearby.getMessagesClient(this@MainActivity2).subscribe(mMessageListener)
.addOnSuccessListener {
Log.e(TAG, "Success") // Always triggered
}.addOnFailureListener {
Log.e(TAG, "Failed " + it) // Never triggered
}
}
}
override fun onStop() {
Nearby.getMessagesClient(this).unsubscribe(mMessageListener)
super.onStop();
}
这是我当前正在使用的代码,但如上所述,它在旧API,Java,没有协程等情况下也失败。Logcat在300或400 ms的情况下是相同的。