如何获得第二个活动发布/接收的附近消息?

时间:2019-04-28 22:09:41

标签: android google-nearby

我的“附近消息”显然可以在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的情况下是相同的。

0 个答案:

没有答案