通过Android Wear通知向手机发送消息

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

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

到目前为止我做了什么:

我已经设置了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());

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

现在我的问题是:

  • 我只能将新意图设置为动作 . 这真的是将一条简单的消息(如字符串或整数)发送回手机的正确方法吗?就像一个只发送消息然后命运的活动?如果是这样,我如何让API进入该活动,以便我可以将消息发送到手机?

  • 如何发送此信息并通过电话接收?我在导游中没有发现任何相关内容...我已经看到有迹象表明,当Wear设备发送消息时我可以在手机上开始练习,但由于我在那里有跑步活动,所以这绝对不是我想做的事情 . ..

谢谢!

回答(1)

3 years ago

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

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

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

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

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

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

请求需要随时更改 . 因此,即使我只对第一篇文章感兴趣,也没有发生,因为我没有更改数据 . 所以当我使用putString时,我不得不添加一个计数器做String并递增它 . 喜欢:

putDataMapRequest.getDataMap() . putString(“path”,“hello”(count));

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