Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何确保已调用onDataChanged?那该怎么办呢?_Android_Wear Os - Fatal编程技术网

Android 如何确保已调用onDataChanged?那该怎么办呢?

Android 如何确保已调用onDataChanged?那该怎么办呢?,android,wear-os,Android,Wear Os,假设我的手机上有一个活动,它的任务是将一个整数(用户输入的)发送到Wear中的服务 在我的电话活动中,我做了一个– Wearable.DataApi.putDataItem(mGoogleApiClient, request); 这就是我的活动。在我的穿戴服务中,我实现了这一点 public void onDataChanged(DataEventBuffer dataEvents) {} 在我的onDataChanged中,我将收到的值保存在SharedReference中,以便在打开活动

假设我的手机上有一个活动,它的任务是将一个整数(用户输入的)发送到Wear中的服务

在我的电话活动中,我做了一个–

Wearable.DataApi.putDataItem(mGoogleApiClient, request);
这就是我的活动。在我的穿戴服务中,我实现了这一点

public void onDataChanged(DataEventBuffer dataEvents) {}
在我的onDataChanged中,我将收到的值保存在SharedReference中,以便在打开活动时在活动中使用该值

我的问题是,当我的用户打开wear活动时,我如何确保我收到了我的价值?谷歌表示,当数据发生变化时,将调用onDataChanged,但我尝试了几次更改整数,但运气不佳,服务没有收到任何信息

如果我没有收到任何信息,我可以从我的活动中做些什么来重新调用/启动接收数据项的过程吗?

在onDataChanged()之后,我强制

mGoogleApiClient.disconnect();
mGoogleApiClient.connect();

只有通过这些设置,onDataChanged()才适合我

原因是——据我所知——当onDataChanged第一次被调用时,其他时候它需要更改才能再次被调用。它甚至可以是删除和创建一个新文件/流/请求并将其放到数据层,或者断开和连接GoogleAppClient。这样客户机每次都会将数据理解为新的和更改的数据


我使用的应用程序在某些时候会从手表向手机发送数据,每次我都会删除并创建一个新文件

根据Android文档,提供的缓冲区DataEventBuffer将在onDataChanged方法完成后关闭。可以使用DataEventBuffer上的getStatus()调用检查DataEventBuffer的状态。您可以演示如何添加此Listner服务吗?因为,根据Android文档,活动和其他短期的Android组件可能会使用addListener(GoogleAppClient,DataApi.DataListener)、addListener(GoogleAppClient,MessageApi.MessageListener)和addListener(GoogleAppClient,NodeApi.NodeListener)在有限的时间内接收事件。在我的第一行代码中,我可以添加一个.await()然后检查是否已完成并发送到手表。确实如此。我的问题不是它不起作用。它在工作,但非常不可靠。当我写这篇文章时,我想可能是因为我的服务(实现onDataChanged)没有运行?或者我需要在我的活动中执行可穿戴的.DataApi.getDataItems()?您可以让您的服务覆盖onPeerConnected和onPeerDisconnected,以查看它是否按预期使用。如果是,那么问题可能出在发送端。在使用putDataItem之前,您是否告诉GAPI客户端进行连接?如果不是,那就是您的问题——putDataItem将不会自动为您连接。如果这些都不能解决问题,请发布更多的代码。当我开始使用
DataApi
时,我错误地认为任何数据更改都会导致
onDataChanged
。请注意,如果您将
DataItem
更新为其已有的值,则不会调用
onDataChanged
。也许这个评论对你有帮助。我正在发送一个22kb的字符串。每次都会有1个字节发生变化。为了更好地理解观众,您想详细说明为什么这对您有效吗?