如何解决如何以包含数据的简单文本文件的形式将数据从 android 可穿戴设备发送到手机?
我有一个可穿戴应用。完成后的应用程序有时间/日期、UUID、地理位置、所选参数等数据显示在我面前,如数据报告或记录在彼此下方的几个 TextViews 中。就像一个清单。我希望将这些数据从我的可穿戴设备传输到我的安卓手机。
现在我要问的是,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);
}
...
}
我在文本视图中显示的数据是通过我称之为以下内容的方法调用的:getLocation、getUUID、getDateTime、getSelections 等...当我单击一个按钮时,我在 setonClickListener 中调用它们。我希望 TextViews 中的这些数据被放置在一个文件或类似的东西中,并在它们生成时将它们从手表发送到手机。
private void getDateTime()
{
SimpleDateFormat sdf_date = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat sdf_time = new SimpleDateFormat("HH:mm:ss z");
String currentDate= sdf_date.format(new Date());
String currentTime= sdf_time.format(new Date());
textView_date_time.setText("Date: "+currentDate+"\n"+"Time: "+currentTime);
}
@SuppressLint("SetTextI18n")
private void getUUID()
{
// Retrieving the value using its keys the file name
// must be same in both saving and retrieving the data
@SuppressLint("WrongConstant") SharedPreferences sh = getSharedPreferences("UUID_File",MODE_APPEND);
// The value will be default as empty string because for
// the very first time when the app is opened,there is nothing to show
String theUUID = sh.getString(PREF_UNIQUE_ID,uniqueID);
// We can then use the data
textView_UUID.setText("UUID: "+theUUID);
}
@SuppressLint("SetTextI18n")
private void getSelections()
{
textView_data_selected.setText("Tool No.: "+c.getToolNo()+
"\nTool Size: " +c.getToolSizestr()+
"\nFrom Mode: " +c.getCurrentModestr()+
"\nGoto Mode: " +c.getModestr()+
"\nMethod: " +c.getmethodstr()+
"\nBit Duration: " +c.getBitDuration()+
"\nUpper bound" +c.getUpStageValue()+
"\nLower bound: "+c.getDownStageValue());
}
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);
}
}
});
现在我如何处理所有这些并将其从我的设备发送到手机?
注意:我想作为文件发送的数据报告,我希望它像在后台完成的一样巧妙地完成。我不知道还能做什么,也不知道去哪里找。
解决方法
如果您想使用数据层,您有两种选择,一种是使用 MessageClient API 将您的数据打包成消息并直接发送到手持设备。这里最简单的方法是创建一个任意的 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());
}
}
}
另一种选择是在数据层中创建数据项的嵌套层次结构,并在两侧实现 DataClient.OnDataChangedListener,这样在一侧写入的更改会自动与另一侧同步。您可以找到有关如何做到这一点的很好的演练here。
对于您的具体情况,将其打包到 JSON 对象中可能是最简单的。写入您喜欢的文件格式,然后您就可以在手持端实现,而无需涉及磨损端。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。