当前位置: 首页 > 知识库问答 >
问题:

Android Wear:将变量从数据对象传递到watch face服务

方夜洛
2023-03-14
    @Override
    public void onDataChanged(DataEventBuffer dataEvents) {
        Log.d(TAG, "Data changed: " + dataEvents);
        for (DataEvent event : dataEvents) {
            if (event.getType() == DataEvent.TYPE_DELETED) {
                Log.d(TAG, "DataItem deleted: " + event.getDataItem().getUri());
            } else if (event.getType() == DataEvent.TYPE_CHANGED) {
                Log.d(TAG, "DataItem changed: " + event.getDataItem().getUri());
                if (event.getDataItem().getUri().getPath().endsWith(Data.PATH_SPEED)) {
                    DataMapItem dataMapItem = DataMapItem.fromDataItem(event.getDataItem());
                    // This is where I get the data for speedReport from the DataMap
                    String speedReport = dataMapItem.getDataMap().getString(Data.SPEED_REPORT);
                }
            }
        } 
    };

我试图让speedReport以这种格式转移到onDraw中:

    @Override
    public void onDraw(Canvas canvas, Rect bounds) {
        canvas.drawRect(0, 0, bounds.width(), bounds.height(), mBackgroundPaint);
        float x = mXOffset;

        // This is where I want to pass the variable for speedReport from the DataMap
        if (speedReport != null) {
            canvas.drawText(speedReport, x - 80, (mYOffset + 14), mAmPmPaint);
        } else {
            canvas.drawText("Loading Data", x - 80, (mYOffset + 14), mAmPmPaint);
        }
    }

当我使用一个活动(例如,对于一个普通的穿戴应用程序,而不是一个手表脸)来做这件事时,我只是使用了setText并将其应用于相应的TextView。但事实证明,这比那更复杂。它不会直接接受变量。我需要用某种机制把它传进来。也许是经办人或者其他什么?

html" target="_blank">数据从DataMap传送到OnDraw的最佳方式是什么?你能提供一个例子作为指导吗?

日志报告我希望从手持设备中得到的任何变量,表明数据正在传递到可穿戴应用程序,并存储在数据对象中。但是数据没有从OnDataChanged中出来。

本着帮助其他正在解决这个问题的人的精神,我确实有一个临时的解决方案可以分享。我将数据保存到共享首选项中,然后从OnDraw中的共享首选项中撤回。这在技术上是可行的,但我的问题仍然存在,什么是将数据从DataMap传送到OnDraw的最佳方式?你能提供一个例子作为指导吗?

共有1个答案

陶智
2023-03-14

您似乎正在使用CanvasWatchFace,所以您应该做的是:

  1. 创建speedreport字段并将其设置为null
  2. 当收到带有新的datamapondatachanged回调时,请设置speedreport并调用invalidate()
  3. ondraw'中检查speedreport是否为null;如果是,则使用“加载数据”字符串,否则使用SpeedReport值.

之前,TextView将有一个字段,该字段将保存SpeedReport的值或默认文本。现在需要创建自己的字段来保存它。

 类似资料:
  • 我有一个VBA脚本,可以计算Outlook中选定文件夹中的未读电子邮件。目前,帐户和文件夹名是硬编码到脚本中的,但我想让它可以从excel表单中配置。 当前该变量设置在以下位置: 理想情况下,我希望有一个名为Config的工作表,其数据如下: 有没有人能提供一些关于如何做到这一点的线索?

  • 问题内容: 我在PHP中有一个变量,我的JavaScript代码中需要它的值。如何将变量从PHP转换为JavaScript? 我有看起来像这样的代码: 我有需要和看起来类似以下内容的JavaScript代码: 问题答案: 实际上,有几种方法可以做到这一点。有些需要比其他更多的开销,有些被认为比其他更好。 没有特别的顺序: 使用AJAX从服务器获取所需的数据。 将数据回显到页面中的某个位置,然后使用

  • 问题内容: 我想根据例如从jenkins传递的变量来运行测试用例,请选择要运行的测试用例:testcaseOne,testcaseTwo 在pom.xml(maven)中: 我有两个testng @test方法: 还有我的testng.xml文件: 如何根据我要运行的测试数量和数量来传递此参数?也许有完全不同的方式来做到这一点? 问题答案: 您可以在testng.xml文件http://testn

  • 问题内容: 我看过类似的论坛,但无法获得任何有效的解决方案。我正在尝试将变量从Flask传递到我的JavaScript文件。这些值将用于我的JavaScript文件中的PubNub。 这是我的Python代码的一部分: 这是我的JavaScript代码(app.js)的一部分: 如果我在Settings.html文件中使用了此代码,而在app.js文件中却没有使用,则此代码有效。 问题答案: 该m

  • 问题内容: 我正在使用Google Maps制作可以加载数据库中包含经纬度数据的标记的地图。我希望用户可以通过单击按钮来加载三个不同的“图层”。单击该按钮时,将在服务器上执行php函数,从而根据数据库中的信息创建xml文件。然后调用AJAX函数提取此xml数据,然后将其用于创建地图标记。没有为每个“层”使用单独的PHP函数(除了SQL查询所在的行,这是相同的东西),有没有办法将AJAX中的java

  • 问题内容: 我似乎无法从php中将变量传递给我的bash脚本。无论我如何尝试,$ uaddress和$ upassword都变为空。 *_ __ _ __ __ * __ __ bash * __ __ * * ** *_ __ _ __ * PHP __ * __ __ * __ ** *_ __ _ _ _输出和调试 _ _ _ * *_ 问题答案: 您需要将变量作为参数传递给Shell脚本,