0

我是 Android Wear 编程的新手,我在开发这个应用程序时正在学习。

它只是一个媒体控制器——这样用户可以在手表上按下播放/暂停,播放视频的手机接收并处理它。

到目前为止我做了什么:

我已设置 Android Wear 应用程序,以便我可以从移动应用程序接收通知。

Intent notificationIntent = new Intent(this, NotificationActivity.class);
                        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                            .setSmallIcon(R.drawable.ic_launcher)
                            .extend(new NotificationCompat.WearableExtender()
                            .setContentIcon(R.drawable.ic_launcher)                                          .setCustomSizePreset(NotificationCompat.WearableExtender.SIZE_FULL_SCREEN)
                            .setDisplayIntent(pendingIntent)
                            .addAction(new NotificationCompat.Action.Builder(R.drawable.ic_launcher, "Hej", pendingIntent).build())
                                    .setContentAction(0));

((NotificationManager) getSystemService(NOTIFICATION_SERVICE))
.notify(NOTIFICATION_ID, notificationBuilder.build());

上面的代码是我用来在手表上显示我的远程卡的代码。但是,我想要实现的是,当按下此按钮时,它应该向手机发送一条消息 BACK。

现在我的问题是:

  • 我只能将新意图设置为操作。这真的是将一条简单消息(如字符串或整数)发送回手机的正确方法吗?就像一个只发送消息然后破坏的活动?如果是这样,我如何将 API 放入该活动中,以便将消息发送到手机?
  • 如何发送此消息并在手机上接收?我在指南中对此一无所获......我已经看到迹象表明我可以在 Wear 设备发送消息时在手机上启动活动,但这绝对不是我想要做的,因为我在那里有一个正在运行的活动。 ..

谢谢!

4

1 回答 1

1

所以这就是我解决问题的方法:

在 Android Wear 模块上,我使用了 WearableListenerService。在我的移动模块中,我只是使用 Wea​​rable DataAPI 向它发送数据事件。WearableListenerService 中的 onDataChanged 函数接收它们,所以我只是将它子类化并实现了我自己的。

在这个方法中,我使用提供的信息来创建和显示一个新的通知。从通知活动中,我请求了我的 ListenerService 类的一个实例,并使用它向移动设备发送 BACK 消息。

然后移动设备上的活动实现 MessageAPI.MessageListener 并且通信正常。

我在路上学到的一些教训:

  • PutDataRequest 请求 = putDataMapRequest.asPutDataRequest(); Wearable.DataApi.putDataItem(wearApiClient, request);

    请求需要每次都更改。所以即使我只对第一篇文章感兴趣,它也没有发生,因为我没有更改数据。因此,当我使用 putString 时,我必须添加一个计数器来执行 String 并递增它。像:

    putDataMapRequest.getDataMap().putString("path", "hello" + (count++));

  • 当设备上尚未运行活动时,将使用侦听器服务。因此,如果您想从穿戴开始移动活动 - 在移动模块中创建一个服务类。如果您想在手机发生某些事情时在可穿戴设备上显示通知 - 请使用可穿戴模块中的 lsitener 服务。如果您只想在两个正在运行的应用程序之间进行通信 - 使用消息或数据 API。

于 2014-10-27T12:19:51.900 回答