Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.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 Wear Watchface设置_Android_Wear Os_Android Wear Data Api - Fatal编程技术网

主机上的Android Wear Watchface设置

主机上的Android Wear Watchface设置,android,wear-os,android-wear-data-api,Android,Wear Os,Android Wear Data Api,我目前开发了一款android wear watchface。不过,我现在想在主机应用程序上创建一个设置部分,允许用户自定义手表面板。我是android开发的新手,所以我对正确的方法很好奇 是否有方法更新主机上的SharedReference,然后将其推送或与设备上的SharedReference同步?或者,我应该以一种完全不同的方式来看待这个问题吗?移动和穿戴模块本身没有共享的首选项,但您可以发送消息和/或更新侦听器将检测到的资产。例如,每当您在手机上更改首选项时,您也可以使用message

我目前开发了一款android wear watchface。不过,我现在想在主机应用程序上创建一个设置部分,允许用户自定义手表面板。我是android开发的新手,所以我对正确的方法很好奇


是否有方法更新主机上的SharedReference,然后将其推送或与设备上的SharedReference同步?或者,我应该以一种完全不同的方式来看待这个问题吗?

移动和穿戴模块本身没有共享的首选项,但您可以发送消息和/或更新侦听器将检测到的资产。例如,每当您在手机上更改首选项时,您也可以使用message API向手表发送消息。在watch上,您应该使用
onMessageReceived
方法实现
WearableListenerService
,在该方法中,您可以解析消息并采取适当的操作,例如在watch上设置首选项


查看Android开发者培训指南:

您可以使用
DataApi
MessageApi
在手机和手表设备之间同步您的手表配置

请查看文档并选择更适合您需要的文档:



下面是一个使用
DataApi
的示例

推送到
DataApi
的所有内容都在设备之间共享,并且两者都可用。您可以在两侧更改此数据,并且会立即通知另一侧(当设备相互连接时)。您还可以随时读取此数据(例如,当用户在手表上选择您的手表面时,配置数据将已经在那里等待您)

在电话端: 每次你想将新的fconfiguration与Android Wear设备同步时,你必须通过Wearable
DataApi

    private void syncConfiguration() {
        if(mGoogleApiClient==null)
            return;

        final PutDataMapRequest putRequest = PutDataMapRequest.create("/CONFIG");
        final DataMap map = putRequest.getDataMap();
        map.putInt("mode", 1);
        map.putInt("color", Color.RED);
        map.putString("string_example", "MyWatchface");
        Wearable.DataApi.putDataItem(mGoogleApiClient,  putRequest.asPutDataRequest());
    }
}

在手表方面: 您需要创建一个扩展可穿戴ListenerService的类:

public class DataLayerListenerService extends WearableListenerService {

    @Override
    public void onDataChanged(DataEventBuffer dataEvents) {
        super.onDataChanged(dataEvents);

        final List<DataEvent> events = FreezableUtils.freezeIterable(dataEvents);
        for(DataEvent event : events) {
            final Uri uri = event.getDataItem().getUri();
            final String path = uri!=null ? uri.getPath() : null;
            if("/CONFIG".equals(path)) {
                final DataMap map = DataMapItem.fromDataItem(event.getDataItem()).getDataMap();
                // read your values from map:
                int mode = map.getInt("mode");
                int color = map.getInt("color");
                String stringExample = map.getString("string_example");
            }
        }
    }
}

请注意,这只是一个用法示例。也许(与其注册一个
WearableListenerService
)的实例,不如直接在您的Watchface内创建一个
MGoogleAppClient
的实例,并在那里添加一个
DataListener

    Wearable.DataApi.addListener(mGoogleApiClient, new DataListener() {
        @Override
        public void onDataChanged(DataEventBuffer dataEvents) {
            // read config here and update the watchface
        }
    });

也许您不需要共享数据-然后您可以使用
MessageApi
进行通信,并仅在保存新配置或watch希望从手机读取当前配置时发送消息。

Wow-感谢您的回复!我本以为一两句话就能让我从总体上思考问题,但你做得太过分了。我会做一些关于你提供的链接和信息阅读,看看我能得到什么!没问题。在研究了这些文档之后,想想这些解决方案中的哪一个更适合您的需求(因为每个案例都略有不同)。您可以随时使用这些代码片段作为支持:)谢谢您的建议。。。这会让我朝着正确的方向前进!
<service android:name=".DataLayerListenerService" >
    <intent-filter>
        <action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
    </intent-filter>
</service>
    Wearable.DataApi.addListener(mGoogleApiClient, new DataListener() {
        @Override
        public void onDataChanged(DataEventBuffer dataEvents) {
            // read config here and update the watchface
        }
    });