У меня есть Nearby Messages, которые, очевидно, работают нормально, обмениваясь сообщениями между IOS и Android, но в моем приложении для Android есть несколько Активов.Как только я переключился на второе действие, сообщения прекращаются
Я удалил весь код в приложении для Android, за исключением строки Nearby.getMessagesClient (this) .subscribe (listener).
У меня теперь есть кнопка для переключения на новый экземпляртой же деятельности.Это работает (сообщения принимаются из приложения IOS, которое просто отправляет сообщения каждые 15 секунд) как первое действие, но затем завершается неудачно (сообщения не принимаются), как только я нажимаю на кнопку, и она запускается сама.
Примечаниечто обратный вызов onSuccessListner запущен (onFailureListener нет).Он думает, что зарегистрирован, но просто не получает никаких сообщений.
Я также сделал это с 2 копиями Activity с тем же кодом, просто чтобы убедиться, что это не так, потому что это был тот же класс Activityчто это не удалось.Все еще не удалось.
Я взял пример приложения Google.Это все еще использует устаревший GooglaApiClient.Это все равно дает тот же результат.
Я заметил, что если пользователь должен предпринять действие, чтобы включить сообщения, которые он работает (как в примере, где пользователь должен включать сообщения).Поэтому я попытался добавить задержку.Задержка 400 миллисекунд означает на моем устройстве, что оно работает.300 миллисекунд, и это все еще не помогает.
Так что, кажется, у меня есть 2 варианта.Добавьте ложную задержку в 1 секунду перед включением сообщений или преобразуйте мое приложение для использования фрагментов и одного действия (я попытался использовать контекст приложения, и, как я обнаружил, в отличие от некоторой документации, он говорит, что это должен быть контекст действия).Также не существует удовлетворительных обходных путей, поэтому я надеюсь, что я сделал что-то глупое.
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 мс.