微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何以包含数据的简单文本文件的形式将数据从 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?