【问题标题】:Android wear sometimes doesn't recieve Messages from phoneAndroid Wear 有时收不到来自手机的消息
【发布时间】:2017-11-10 17:22:33
【问题描述】:

我正在开发一款从手表获取传感器数据的应用。我使用手机开始采集,但有些情况下手表和手机似乎完美连接,但当我发送“开始采集”命令时没有任何反应。手表必须重新启动才能开始接受命令。

这就是我从手机建立连接的方式:

mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Wearable.API)
            .addConnectionCallbacks(MainActivity.this)
            .addOnConnectionFailedListener(this)
            .build();
    mGoogleApiClient.connect();

这就是我从手机发送数据的方式:

if (mGoogleApiClient != null && mGoogleApiClient.isConnected() ) {

        final PutDataMapRequest putDataMapReq = PutDataMapRequest.create("/toWear");
        putDataMapReq.getDataMap().putInt("duration", duration); // Duration of data, selected in TimeSelector
        putDataMapReq.getDataMap().putString("type", type);
        putDataMapReq.getDataMap().putString("name", name);
        putDataMapReq.getDataMap().putString("Starting Time", startingTime); // Starting Time of data
        putDataMapReq.getDataMap().putBoolean("Stop", false); //Stop is set True when Phone has to stop watch from taking data
        putDataMapReq.setUrgent();
        PutDataRequest request = putDataMapReq.asPutDataRequest();
        Wearable.DataApi.putDataItem(mGoogleApiClient, request).setResultCallback(new ResultCallback<DataApi.DataItemResult>() {
            @Override
            public void onResult(DataApi.DataItemResult dataItemResult) {
            }
        });

    }
    else
    {
        Toast.makeText(context, "Not Connected properly", Toast.LENGTH_LONG).show();

    }

这就是我在智能手表中接受数据的方式:

  public void onDataChanged(DataEventBuffer dataEvents) {
    count=0;
    broadcaster = LocalBroadcastManager.getInstance(this);

    for (DataEvent event : dataEvents) {
        if (event.getType() == DataEvent.TYPE_CHANGED) {
            // DataItem changed
            DataItem item = event.getDataItem();

            if (item.getUri().getPath().compareTo("/toWear") == 0) {
                DataMap dataMap = DataMapItem.fromDataItem(item).getDataMap();


                int duration = dataMap.getInt("duration");
                stop=dataMap.getBoolean("Stop");
                String type = dataMap.getString("type");
                String name = dataMap.getString("name");
                String startingTime= dataMap.getString("Starting Time");
                //  updateCount(dataMap.getInt(COUNT_KEY));


                Bundle b= new Bundle();
                b.putInt("duration",duration);
                b.putString("Starting Time",startingTime);

                if(!stop) {
                    AcquisitionStatus=true;
                    setAcquisitionStatus(true);
                    Intent sensorServ = new Intent(MyService.this, SensorService.class);
                    sensorServ.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY);
                    sensorServ.putExtras(b);
                    startService(sensorServ);

                }
                else {
                    AcquisitionStatus = false;
                    setAcquisitionStatus(false);
                }

            }
        } else if (event.getType() == DataEvent.TYPE_DELETED) {
            // DataItem deleted
        }
    }
}

我想知道,为什么有时即使建立了正确的连接,智能手表也无法从手机接收数据。

【问题讨论】:

    标签: android wear-os android-wear-data-api


    【解决方案1】:

    Android Wear Data API 确保 100% 的数据传输。如果这两个数据相同,则不会发送数据,因为它不会更新屏幕上的任何内容。检查数据是否相同。

    【讨论】:

    • 谢谢,但数据不一样。我在 10 秒内发送从 3 个传感器获取的数据。采样频率为 100hz。
    • 假设您要发送三个数据。最后发送的数据是否丢失或中间或最先发送的数据?如果中间的数据丢失,那么它可能会用下一个值更新。例如,如果您发送了一个值为“10”的类型,并且在 10 秒后,如果您发送另一个值为“15”的数据,则只有最近的值被发送到磨损的机会率更高.因为数据不会在生成后立即发送。 Android 将其排队并处理它。你能检查一下中间或最后的数据是否丢失了吗?
    • 假设发送了 3 个数据。这就是发生的情况,在 20% 的情况下,所有 3 个都将被发送。在其他 80% 的情况下,最后的数据未命中。比如,我不会得到第三个,或者如果我没有得到第二个,我也会错过第三个。一旦我错过了 1 个数据,后面的数据也会丢失。
    • 您是否阅读过以下内容: 注意:成功的结果代码并不能保证消息的传递。如果您的应用需要数据可靠性,请考虑使用 DataItem 对象或 ChannelClient 类在设备之间发送数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多