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