如何以包含数据的简单文本文件的形式将数据从android可穿戴设备发送到手机?

如何以包含数据的简单文本文件的形式将数据从android可穿戴设备发送到手机?,android,wear-os,data-transfer,wearables,Android,Wear Os,Data Transfer,Wearables,我有一个可穿戴的应用程序。该应用程序完成后,会在我面前显示时间/日期、UUID、地理位置、所选参数等数据,如数据报告或在相互下方的多个文本视图中登录。像一张单子。我想将这些数据从我的可穿戴设备传输到我的android手机 现在我要问的是,WearOS应用程序将手机与手表配对,是否能实现这样的功能?比如数据可以通过它发送吗?或者我到底能做什么?我在文档中读到了关于使用数据层API同步数据项的内容,但我不确定提供的代码片段是否有助于实现我想要的功能 public class MainActivity

我有一个可穿戴的应用程序。该应用程序完成后,会在我面前显示时间/日期、UUID、地理位置、所选参数等数据,如数据报告或在相互下方的多个文本视图中登录。像一张单子。我想将这些数据从我的可穿戴设备传输到我的android手机

现在我要问的是,WearOS应用程序将手机与手表配对,是否能实现这样的功能?比如数据可以通过它发送吗?或者我到底能做什么?我在文档中读到了关于使用数据层API同步数据项的内容,但我不确定提供的代码片段是否有助于实现我想要的功能

public class MainActivity extends Activity {
    private static final String COUNT_KEY = "com.example.key.count";
    private DataClient dataClient;
    private int count = 0;
    ...
    // Create a data map and put data in it
    private void increaseCounter() {
        PutDataMapRequest putDataMapReq = PutDataMapRequest.create("/count");
        putDataMapReq.getDataMap().putInt(COUNT_KEY, count++);
        PutDataRequest putDataReq = putDataMapReq.asPutDataRequest();
        Task<DataItem> putDataTask = dataClient.putDataItem(putDataReq);
    }
  ...
}
以上是我用来获取数据的方法的例子。然后我在这里叫他们:

    gps_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (Build.VERSION.SDK_INT >= 26) {
                    getLocation();
                    getDateTime();
                    getUUID();
                    getSelections();
                }
                else
                {
                    //ActivityCompat.requestPermissions(get_location.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
                    Toast.makeText(get_location.this,"Build SDK too low",Toast.LENGTH_SHORT);
                }

            }
        });
现在,我如何将所有这些信息从我的设备发送到手机


注意:我想以文件形式发送的数据报告,我希望它能像在后台做的一样巧妙地完成。我不知道还能做什么,也不知道去哪里看。

如果你想使用数据层,你有两个选择,一个是使用将数据捆绑在一条消息中,并直接发送到手持设备。这里最简单的方法是创建一个任意的
JSONObject
,并将数据序列化为JSON字符串,您可以将其塞进消息中。例如:

try {
    final JSONObject object = new JSONObject();
    object.put("heart_rate", (int) event.values[0]);
    object.put("timestamp", Instant.now().toString());
    new MessageSender("/MessageChannel", object.toString(), getApplicationContext()).start();
} catch (JSONException e) {
    Log.e(TAG, "Failed to create JSON object");
}
在我的例子中,我在我的
onSensorChanged
实现中这样做,但是您可以在更新文本的任何地方插入它

MessageSender
只是围绕MessageClient的一个线程包装器:

import java.util.List;

class MessageSender extends Thread {
    private static final String TAG = "MessageSender";

    String path;
    String message;
    Context context;

    MessageSender(String path, String message, Context context) {
        this.path = path;
        this.message = message;
        this.context = context;
    }

    public void run() {
        try {
            Task<List<Node>> nodeListTask = Wearable.getNodeClient(context.getApplicationContext()).getConnectedNodes();
            List<Node> nodes = Tasks.await(nodeListTask);
            byte[] payload = message.getBytes();

            for (Node node : nodes) {
                String nodeId = node.getId();
                Task<Integer> sendMessageTask = Wearable.getMessageClient(context).sendMessage(nodeId, this.path, payload);

                try {
                    Tasks.await(sendMessageTask);
                } catch (Exception exception) {
                    // TODO: Implement exception handling
                    Log.e(TAG, "Exception thrown");
                }
            }
        } catch (Exception exception) {
            Log.e(TAG, exception.getMessage());
        }
    }
}
import java.util.List;
类MessageSender扩展线程{
私有静态最终字符串TAG=“MessageSender”;
字符串路径;
字符串消息;
语境;
MessageSender(字符串路径、字符串消息、上下文){
this.path=path;
this.message=消息;
this.context=上下文;
}
公开募捐{
试一试{
Task nodeListTask=Wearable.getNodeClient(context.getApplicationContext()).getConnectedNodes();
列表节点=任务。等待(nodeListTask);
字节[]有效负载=message.getBytes();
用于(节点:节点){
字符串nodeId=node.getId();
Task sendMessageTask=Wearable.getMessageClient(上下文).sendMessage(nodeId,this.path,有效负载);
试一试{
任务。等待(sendMessageTask);
}捕获(异常){
//TODO:实现异常处理
Log.e(标记“抛出异常”);
}
}
}捕获(异常){
Log.e(标记,exception.getMessage());
}
}
}
另一个选项是在数据层中创建数据项的嵌套层次结构,并在两侧实现,以便在一侧写入的更改自动与另一侧同步。你可以找到一个很好的演练如何做到这一点

对于您的特定情况,仅将其打包到JSON对象中可能是最简单的。写入到您的首选文件格式,然后您可以在手持端实现,而无需涉及磨损端

import java.util.List;

class MessageSender extends Thread {
    private static final String TAG = "MessageSender";

    String path;
    String message;
    Context context;

    MessageSender(String path, String message, Context context) {
        this.path = path;
        this.message = message;
        this.context = context;
    }

    public void run() {
        try {
            Task<List<Node>> nodeListTask = Wearable.getNodeClient(context.getApplicationContext()).getConnectedNodes();
            List<Node> nodes = Tasks.await(nodeListTask);
            byte[] payload = message.getBytes();

            for (Node node : nodes) {
                String nodeId = node.getId();
                Task<Integer> sendMessageTask = Wearable.getMessageClient(context).sendMessage(nodeId, this.path, payload);

                try {
                    Tasks.await(sendMessageTask);
                } catch (Exception exception) {
                    // TODO: Implement exception handling
                    Log.e(TAG, "Exception thrown");
                }
            }
        } catch (Exception exception) {
            Log.e(TAG, exception.getMessage());
        }
    }
}