3

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

有没有办法更新主机上的共享首选项,然后将其与穿戴设备上的共享首选项推送或同步?或者我应该以完全不同的方式看待这个问题?

4

2 回答 2

14

您可以使用DataApiMessageApi在电话和手表设备之间同步您的表盘配置。

请查看文档并选择更适合您需求的文档:
https ://developer.android.com/training/wearables/data-layer/index.html https://developer.android.com/training/可穿戴设备/数据层/数据项.html
https://developer.android.com/training/wearables/data-layer/messages.html


这是一个使用DataApi.

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

在电话方面:

public class WatchfaceConfigActivity extends Activity {
    private GoogleApiClient mGoogleApiClient;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(new ConnectionCallbacks() {
                    @Override
                    public void onConnected(Bundle connectionHint) {
                    }
                    @Override
                    public void onConnectionSuspended(int cause) {
                    }
            })
            .addOnConnectionFailedListener(new OnConnectionFailedListener() {
                    @Override
                    public void onConnectionFailed(ConnectionResult result) {
                    }
                })
            .addApi(Wearable.API)
            .build();
        mGoogleApiClient.connect();
    }

并且每次您想将新的 fconfiguration 与 Android Wear 设备同步时,您必须通过 Wearable 放置一个 DataRequest 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());
    }
}


在手表方面:

您需要创建一个扩展类WearableListenerService

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");
            }
        }
    }
}

并在你的声明中AndroidManifest

<service android:name=".DataLayerListenerService" >
    <intent-filter>
        <action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
    </intent-filter>
</service>

请注意,这只是一个使用示例。也许(而不是注册一个实例)对你来说直接在你的 WatchfaceWearableListenerService中创建一个实例并在那里添加一个会更好:mGoogleApiClientDataListener

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

也许您不需要共享数据 -MessageApi只有在保存新配置或手表想要从手机读取当前配置时,您才能使用通信和发送消息。

于 2014-07-22T19:25:25.323 回答
1

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

查看 Android 开发者培训指南:https ://developer.android.com/training/wearables/data-layer/index.html

于 2014-07-22T19:16:27.180 回答