WearableListenerService,onDataChanged()不被调用

我跟着教程从手机调用穿戴式活动,在这里张贴如何发送通知从手持式穿戴打开穿戴设备上的活动 。 但是,我从答案中获取源代码。 但是,我无法得到它运行。 它看起来像onDataChanged()永远不会被调用。 我自己问这个问题是因为这个例子似乎适用于其他人。 我在KitKat 4.4.2上,如果有的话。

任何提示在哪里检查,谢谢。

Solutions Collecting From Web of "WearableListenerService,onDataChanged()不被调用"

有两件事你可以检查:

  • 穿戴应用程序的packageName应该与设备应用程序的packageName相同
  • onDataChanged()只在数据真正改变时才被调用。 如果将相同的数据放入DataApi中多次,则只会调用该方法一次,直到您写入不同的数据。 您可以添加一个时间戳到数据,以确保每个写入操作调用一次该方法。 但是,使用DataApi在电池使用方面可能比发送消息更昂贵。 因此,如果您只是在将数据放入DataApi后触发某个操作,则只需在完成后发送一条消息即可。

使用播放服务的8.3.0版本,邮件可能被延迟到30分钟。 用新的setUrgent()方法发送没有延迟。

最后,如果您正在开发可穿戴设备,那么您将知道电池寿命和功耗优化对于获得良好的用户体验至关重要。 借助Google Play服务8.3,我们更新了DataApi,以便在数据项同步方面提供紧迫性。 现在,可以将优先级添加到数据项以确定何时应该同步。 例如,如果您正在构build需要立即同步的应用程序(例如远程控制应用程序),则仍然可以通过调用setUrgent()立即完成,但对于更新联系人等内容,您可以容忍一些延迟。 非紧急数据项可能会延迟30分钟,但您可以预期,在大多数情况下,它们将在几分钟内交付。 低优先级现在是默认值,所以需要setUrgent()来获得前一个时间。

http://android-developers.blogspot.nl/2015/11/whats-new-in-google-play-services-83.html

请确保build.gradle文件中的applicationId对于掌上电脑和可穿戴模块是相同的

 apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "your.applicationid" // needs to be the same in both modules minSdkVersion 20 targetSdkVersion 23 versionCode 1 versionName "1.0" targetCompatibility = '1.7' } ... 

对我来说,罪魁祸首是服务声明中的这一行:

 android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" 

我不完全确定这条线是什么导致服务不接收事件,但是当它被删除时,它开始正常运行。

1.检查build.gradle移动版和磨损版具有相同的播放版本com.google.android.gms:play-services-wearable:6.5.87'

我的手机上有一个+号,只有手机上的最后一个版本

升级相同的版本,直到它的工作

2.愚蠢的解决方法,如果没有任何工作(!!这对不同的玩对版本的作品,如果你做第一步,你不需要这个)

 .... Wearable.DataApi.putDataItem(mGoogleApiClient, request) ....... this line after your put Wearable.DataApi.deleteDataItems(mGoogleApiClient, request.getUri()); 

这是一个复制技巧,做3件事情:

  • 唤醒对

  • 发送数据

  • 用良好的数据在两者上执行OnDataChange

  • 删除数据(在没有数据的情况下在两者上执行OnDataChange)(所以即使在数据被删除之后也要准备工作)

我的问题是,数据排队,并暂停观看,直到第一次触摸 – 现在是实时双向

如果您使用的是Android Wear模拟器,请确保手机上的Android Wear应用程序已连接到模拟器,然后运行adb tcp forwarding命令。

其他详细信息在这里: https : //stackoverflow.com/a/25506889/1044864

在onDataChanged方法之后,我是强制的

onDataChanged(DataEventBuffer dataEvents){

–doDataStuff —

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

}

只有这个设置onDataChanged正在为我工​​作。