不可能使用DataClient(Google Services)将WEAR OS应用程序的数据发送到电话应用程序(Kotlin)

问题描述 投票:0回答:1
问题是,我无法将数据发送到电话应用程序。

在我的手表应用程序中,我正在使用检索和更新值的ViewModel。

会话完成后,数据被“包裹”(我在名为Common的第三个模块上具有数据类SessionData,它在手表和电话应用程序之间共享),我使用putdatamaprequest将其发送给它们:

suspend fun sendSessionDataToDataLayer(sessionData: SessionData, context: Context) { val bundle = Bundle().apply { putParcelable("sessionData", sessionData) } val putDataMapRequest = PutDataMapRequest.create("/session-data").apply { dataMap.putAll(DataMap.fromBundle(bundle)) } val putDataRequest = putDataMapRequest.asPutDataRequest() try { Log.d("sendSessionDataToDataLayer", "Sending session data: $sessionData") Wearable.getDataClient(context).putDataItem(putDataRequest).await() Log.d("sendSessionDataToDataLayer", "Data sent successfully") // Show a toast to the user on the watch Toast.makeText(context, "Data queued for transfer", Toast.LENGTH_SHORT).show() resetSession() // Only reset after successful data transfer } catch (e: Exception) { Log.e("sendSessionDataToDataLayer", "Failed to send session data", e) // Optionally show an error toast Toast.makeText(context, "Data send failed: ${e.message}", Toast.LENGTH_SHORT).show() } }

路径是

"/session-data"

,在手表和电话应用中相同。 我从中得到的吐司:“数据排队用于传输”

然后,我在手机应用程序上使用了我的侦听器,并带有onDatachanged函数。它应该检索数据并将其重新加压。但是

OnDataChanged

永远不会开火...
class MyDataLayerListenerService : WearableListenerService() {
override fun onDataChanged(dataEvents: DataEventBuffer) {
    // Indicate that onDataChanged was called at all
    Toast.makeText(this, "onDataChanged triggered!", Toast.LENGTH_SHORT).show()

    dataEvents.forEach { event ->
        if (event.type == DataEvent.TYPE_CHANGED && event.dataItem.uri.path == "/session-data") {
            try {
                val dataMap = DataMapItem.fromDataItem(event.dataItem).dataMap
                val bundle = dataMap.toBundle()
                val sessionData: SessionData? = bundle.getParcelable("sessionData")

                if (sessionData != null) {
                    Toast.makeText(this, "Received session data!", Toast.LENGTH_SHORT).show()
                    saveSessionDataLocally(sessionData)
                } else {
                    Toast.makeText(this, "SessionData is null", Toast.LENGTH_SHORT).show()
                }
            } catch (e: Exception) {
                Toast.makeText(this, "Failed to parse session data: ${e.message}", Toast.LENGTH_LONG).show()
            }
        }
    }
}

private fun saveSessionDataLocally(sessionData: SessionData) {
    // e.g. show a final toast
    Toast.makeText(this, "Session data saved: ${sessionData.distanceSkated}", Toast.LENGTH_SHORT).show()
}

}

从此,我没有任何烤面包。在电话屏幕上,我应该看到一排与日期会话,这不会发生。数据未传输。

我添加了帮助敬酒,以了解这是在哪里失败的。会话完成后,手表吐司说“数据排列为传输”。因此看来手表认为这项工作已经正确完成了。我还通过电话实施了吐司,但它们从未显示。只是一个空白页面而不是滑冰会话日期。 10 Y.O.主题,他们建议手机和手表必须具有相同的应用程序ID。同样,我认为我需要节点ID来发送数据,但仅用于MessageClient,而不是DataClient。

我还进行了一些基本检查:在同一WiFi上观看和电话彼此正确连接,还登录了相同的Google帐户(以及相同的三星帐户)。我不纪念手表并修理了。我将手表完全重置,然后将其修理到电话上。截至2025年1月(24.49.33-705592033),我手表上的Google服务是最新的,并且在电话中,Google Play服务是完全允许的,并且优先级。
在手机清单中,Google服务可穿戴。我有dureable.bind.listener和dureable.data.changed。数据路径很好,例如“/session-data".

电话清单:

<service android:name=".MyDataLayerListenerService" android:exported="true" android:permission="com.google.android.gms.permission.WEARABLE_BIND_LISTENER"> <!-- If you want to listen for data changes at a specific path, declare a DATA_CHANGED action and optionally specify a pathPrefix to filter for certain paths (like "/session-data"). --> <intent-filter> <!-- Listen for data changes --> <action android:name="com.google.android.gms.wearable.DATA_CHANGED" /> <!-- (Optional) If you only care about a specific path in the data layer, add <data>: --> <data android:scheme="wear" android:host="*" android:pathPrefix="/session-data" /> </intent-filter> </service>

在Gradle文件中识别并声明了所有模块(手表,电话,常见)。

我试图开发一个简单的项目,只是为了将一个简单的字符串从我的手表传递到电话,但无法正常工作。

请审查以下内容

安全要求

,否则您的应用不会相互通信:

包装名称必须匹配跨设备。

包装的签名必须匹配设备。

其他有关此主题的信息/教程的来源:

Github中的

WearOS样品回购中的datalayer样品

;

android kotlin wear-os wikimedia-android-data-client
1个回答
0
投票

来自Github的Hordossic repo的Datalayer助手;

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.