【问题标题】:Android Wear Watchface Settings on host主机上的 Android Wear 表盘设置
【发布时间】:2015-04-10 01:36:27
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    请查看文档并选择更适合您需求的文档:
    https://developer.android.com/training/wearables/data-layer/index.html https://developer.android.com/training/wearables/data-layer/data-items.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();
        }
    

    并且每次您想与 Android Wear 设备同步新的 fconfiguration 时,您必须通过 Wearable DataApi 发送一个 DataRequest:

        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>
    

    请注意,这只是一个使用示例。也许(而不是注册WearableListenerService 的实例),您最好直接在表盘内创建mGoogleApiClient 的实例并在那里添加DataListener

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

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

    【讨论】:

    • 哇 - 感谢您的回复!我期待一两句话让我思考一般路径,但你超越了。我会阅读你提供的链接和信息,看看我能做什么!
    • 没问题。在研究了这些文档之后,想想这些解决方案中的哪一个更适合您的需求(因为每种情况都略有不同)。您可以随时使用这些 sn-ps 作为支持:)
    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的建议...这将使我朝着正确的方向前进!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多