Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用dataApi更新复杂度_Android_Wear Os_Android Wear Data Api_Android Wear 2.0 - Fatal编程技术网

Android 使用dataApi更新复杂度

Android 使用dataApi更新复杂度,android,wear-os,android-wear-data-api,android-wear-2.0,Android,Wear Os,Android Wear Data Api,Android Wear 2.0,这能做到吗?如果我在WearableListener类中执行此操作,如何将数据传递给CompliationService并强制更新? 非常感谢 此代码位于手持设备上,用于在发生更改时更新数据项: private void syncDataItem(){ Log.d(TAG, "PanicAlert AlarmStatus=" + isAlertActive(context)); PutDataMapRequest putDataMapRequest = PutDataMapReq

这能做到吗?如果我在WearableListener类中执行此操作,如何将数据传递给CompliationService并强制更新? 非常感谢

此代码位于手持设备上,用于在发生更改时更新数据项:

private void syncDataItem(){
    Log.d(TAG, "PanicAlert AlarmStatus=" + isAlertActive(context));
    PutDataMapRequest putDataMapRequest = PutDataMapRequest.create(PATH_ALARM);
    putDataMapRequest.getDataMap().putBoolean(FIELD_ALARM_ON, isAlertActive(context));
    putDataMapRequest.setUrgent();
    Wearable.DataApi.putDataItem(mGoogleApiClient, putDataMapRequest.asPutDataRequest()).await();
}
这是手表上的DataListener:

public class DataLayerListenerService extends WearableListenerService {

private static final String TAG = "DataLayerSample";
private static final String PATH_ALARM = "/alarm_path";
private static final String FIELD_ALARM_ON = "alarm_on";

@Override
public void onDataChanged(DataEventBuffer dataEvents) {
    if (Log.isLoggable(TAG, Log.DEBUG)) {
        Log.d(TAG, "onDataChanged: " + dataEvents);
    }

    GoogleApiClient googleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Wearable.API)
            .build();

    ConnectionResult connectionResult =
            googleApiClient.blockingConnect(30, TimeUnit.SECONDS);

    if (!connectionResult.isSuccess()) {
        Log.e(TAG, "Failed to connect to GoogleApiClient.");
        return;
    }
    for (DataEvent event : dataEvents) {
        //Force update of complication? How?
    }
}
}

这是复杂化服务(谷歌的例子只是提供了一个随机数):


在我看来,您需要在您的
WearableListenerService
中安装一个
ProviderUpdateRequester
。当您从手持设备接收到更改后的数据时,拨打如下电话:

new ProviderUpdateRequester(context, new ComponentName(context, "myComplicationClass"))
        .requestUpdateAll();
显然,在执行此操作之前,您需要将更改后的数据存储在本地(在手表上),存储在数据库、
SharedReferences
,或其他任何地方,因为无法直接将数据传递给提供商。但无论如何,您可能已经这样做了,以使您的提供商能够正常工作


文档在这里:

我觉得您需要在
WearableListenerService
中安装一个
ProviderUpdateRequester
。当您从手持设备接收到更改后的数据时,拨打如下电话:

new ProviderUpdateRequester(context, new ComponentName(context, "myComplicationClass"))
        .requestUpdateAll();
显然,在执行此操作之前,您需要将更改后的数据存储在本地(在手表上),存储在数据库、
SharedReferences
,或其他任何地方,因为无法直接将数据传递给提供商。但无论如何,您可能已经这样做了,以使您的提供商能够正常工作


文档位于此处:

请向我们展示一些代码和工作。但无论如何,请记住,除非数据被更改,否则数据API实际上不会发送数据。所以,一般的做法是在其中添加一个时间戳。对不起,我用一些代码更新了这篇文章。我读过关于时间戳的内容,但我真的只需要它来更新数据更改时的复杂性,这样就可以了。您是否在
AndroidManifest.xml
中正确声明了服务?是的,我让DataApi和MessageApi来发送和同步消息。但是我找不到在发生更改时使用dataApi和CompliationService来更新数据的方法。您能提供错误日志吗?请向我们展示一些代码和工作。但无论如何,请记住,除非数据被更改,否则数据API实际上不会发送数据。所以,一般的做法是在其中添加一个时间戳。对不起,我用一些代码更新了这篇文章。我读过关于时间戳的内容,但我真的只需要它来更新数据更改时的复杂性,这样就可以了。您是否在
AndroidManifest.xml
中正确声明了服务?是的,我让DataApi和MessageApi来发送和同步消息。但是我找不到在发生更改时使用dataApi和CompliationService来更新数据的方法。你能提供错误日志吗?是的,ProviderUpdateRequester正是我所需要的。谢谢@曼努埃尔塞罗:你最终是如何让事情运转起来的?我不知道“上下文”/“myComplicationClass”是什么?是的,ProviderUpdateRequester正是我需要的。谢谢@曼努埃尔塞罗:你最终是如何让事情运转起来的?我不知道“上下文”/“myComplicationClass”是什么?