繁体   English   中英

Android穿戴式手机通讯

[英]Android Wear to Handset Communication

我正在为Wear创建一个应用程序,该应用程序具有一个电话伴侣应用程序来执行一些较重的过程并进行API调用。

到目前为止,关于这两种设备之间的通信,我一直在关注本教程-http: //android-wear-docs.readthedocs.io/en/latest/data.html

这使我可以与手表进行通讯,但是现在我想知道如何以其他方式复制它。

我在Wear应用程序上拥有的当前代码是这样的(电话和手表上也有单独的侦听器类):

public void sendTestMessage(View view)
{
    String WEARABLE_DATA_PATH = "/wearable_data";
    DataMap dataMap = new DataMap();
    dataMap.putString("WATCH2PHONE TEST MESSAGE EVENT!", "1");
    new SendToDataLayerThread(WEARABLE_DATA_PATH, dataMap).start();
}

class SendToDataLayerThread extends Thread
{
    String path;
    DataMap dataMap;

    SendToDataLayerThread(String p, DataMap data)
    {
        path = p;
        dataMap = data;
    }

    public void run()
    {
        PutDataMapRequest putDMR = PutDataMapRequest.create(path);
        putDMR.getDataMap().putAll(dataMap);
        PutDataRequest request = putDMR.asPutDataRequest();
        DataApi.DataItemResult result = Wearable.DataApi.putDataItem(googleClient, request).await();

        if (result.getStatus().isSuccess())
        {
            Log.v("myTag", "DataMap: " + dataMap + " sent successfully to data layer ");
        }

        else
        {
            Log.v("myTag", "ERROR: failed to send DataMap to data layer");
        }
    }
}

侦听器类(对于手表,电话版本相同):

public class ListenerService extends WearableListenerService
{
    @Override
    public void onDataChanged(DataEventBuffer dataEvents)
    {
        DataMap dataMap;
        for (DataEvent event : dataEvents)
        {
            Log.v("myTag", "DataMap received on device: " + DataMapItem.fromDataItem(event.getDataItem()).getDataMap());
        }
    }
}

因此,发送测试消息会将消息发送到该层并进行发送,但是手表的侦听器服务会接收到这些消息。

我假设“字符串WEARABLE_DATA_PATH =“ / wearable_data”;“ 是导致它最终被手表接收的原因,但我不确定将其更改为什么以便使其正确发送。

Data API在两个方向上均相同。 手持设备上使用的特定体系结构取决于您的应用程序的结构,但是https://developer.android.com/training/wearables/data-layer/events.html#Listen中的文档中对这些选项有很好的概述。 。

该页面还讨论了使用路径过滤接收到的数据事件。 同样,这取决于您的体系结构,但是使用"/data_from_handheld""/data_from_wearable" "/data_from_handheld"路径来区分沿不同方向运行的DataItem可能是合理的。 或者,您可以使用相同的路径,然后数据事件将出现在所有连接的设备上-可能不是您想要的。

另一种常见的“陷阱”:仅当数据实际更改时,数据API事件才会触发。 这是API处理实际通信的有效方法,但可能会使开发变得困难。 要强制使用它,只需添加一个总是不同的项目,例如:

dataMap.putLong("timestamp", System.nanoTime());

...但是请务必在部署应用程序之前将其删除!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM