Приложение WearOS и телефон не обмениваются даннымиAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Приложение WearOS и телефон не обмениваются данными

Сообщение Anonymous »

Требуемое приложение:
Когда я нажимаю кнопку в приложении WearOS, оно должно отправить данные сообщения в приложение «Телефон». Когда сообщение получено из приложения телефона, данные должны отображаться на экране или в лог-коде.
Я пытаюсь связать телефонное приложение и приложение Wear OS, используя язык Kotlin в студии Android. Приложение, которое я хочу сделать, — это просто отправить данные, которые я установил, в приложение телефона при нажатии кнопки на WearOS. Я настроил MessageClient на обеих сторонах, и хотя я могу отправлять данные из ОС Wear в приложение для телефона, функция onMessageReceived в приложении для телефона, похоже, никогда не срабатывает. Устройства сопряжены.
Код Wear OS:

Код: Выделить всё

class MainActivity : ComponentActivity(),
DataClient.OnDataChangedListener,
MessageClient.OnMessageReceivedListener{

private var activityContext: Context? = null
private var dataClient: DataClient? = null
private var messageClient: MessageClient? = null

companion object {
const val MESSAGE_PATH_SEND = "/send_message"
const val MESSAGE_PATH_RECEIVE = "/receive_message"
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
WearApp("Android")
}

activityContext = this

dataClient = Wearable.getDataClient(this)
messageClient = Wearable.getMessageClient(this)

}

@Composable
fun WearApp(greetingName: String) {
WearOSCommunicationTheme {
Column(
modifier = Modifier
.fillMaxSize()
.background(MaterialTheme.colors.background),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
//Greeting(greetingName = greetingName)
Text(text = "Example text")
Button(
modifier = Modifier
.padding(10.dp)
.fillMaxWidth(),
onClick = { sendMessageToPhone("this is an example message") }) {

Text(text = "Send Msg")

}
}
}
}

private fun sendMessageToPhone(message: String) {
Wearable.getNodeClient(activityContext!!).connectedNodes.addOnSuccessListener { nodes ->
for (node in nodes) {
if (node.isNearby) {  // Check if the node is reachable
Wearable.getMessageClient(activityContext!!).sendMessage(node.id, MESSAGE_PATH_SEND, message.toByteArray(Charsets.UTF_8))
.addOnSuccessListener {
// Handle success here with a toast
Log.d("WearOSLog", "Message sent successfully to ${node.id}")
}
.addOnFailureListener { exception ->
// Handle failure here with a toast
Log.e("WearOSLog", "Failed to send message to ${node.id}", exception)
}
} else {
Log.d("WearOSLog", "Node ${node.id} is not reachable")
}
}
}.addOnFailureListener { exception ->
// Handle failure to get connected nodes here
Log.e("WearOSLog", "Failed to get connected nodes", exception)
}
}

override fun onDataChanged(dataEvents: DataEventBuffer) {
for (event in dataEvents) {
if (event.type == DataEvent.TYPE_CHANGED){
// Handle data change
}
}
}

override fun onMessageReceived(messageEvent: MessageEvent) {
TODO("Not yet implemented")
}

override fun onResume() {
super.onResume()

try {
Wearable.getDataClient(activityContext!!).addListener(this)
Wearable.getMessageClient(activityContext!!).addListener(this)
} catch (e: Exception) {
e.printStackTrace()
}
}

override fun onPause() {
super.onPause()
Wearable.getDataClient(activityContext!!).removeListener(this)
Wearable.getMessageClient(activityContext!!).removeListener(this)
}

}
Код приложения для телефона:

Код: Выделить всё

class MainActivity : AppCompatActivity(),
MessageClient.OnMessageReceivedListener,
DataClient.OnDataChangedListener{

companion object {
const val MESSAGE_PATH_SEND = "/send_message"
const val MESSAGE_PATH_RECEIVE = "/receive_message"
}

override fun onCreate(savedInstanceState:  Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}

override fun onMessageReceived(messageEvent: MessageEvent) {
try {
if (messageEvent.path == MESSAGE_PATH_SEND) {
val message = String(messageEvent.data, Charsets.UTF_8)
Log.d("PhoneSide", "Message received: $message");
}
} catch (e: Exception) {
e.printStackTrace()
Log.d("PhoneSide", "error")
}
}

override fun onResume() {
super.onResume()

try {
Wearable.getDataClient(this).addListener(this)
Wearable.getMessageClient(this).addListener(this)
} catch (e: Exception) {
e.printStackTrace()
}
}

override fun onPause() {
super.onPause()

try {
Wearable.getDataClient(this).removeListener(this)
Wearable.getMessageClient(this).removeListener(this)
}  catch (e: Exception) {
e.printStackTrace()
}
}

override fun onDataChanged(p0: DataEventBuffer) {
TODO("Not yet implemented")
}
}
Также связанные документы манифеста:
Файл манифеста WearOS: Файл манифеста приложения для телефона: Я прочитал соответствующие части страницы разработчика Android, но не смог найти связанный путь для приложений этого типа. Я не смог найти практически никакой информации или учебника по этой теме в Интернете. Буду рад, если поможете.


Подробнее здесь: https://stackoverflow.com/questions/768 ... ommunicate
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»