编程语言
首页 > 编程语言> > Java-将对象从手机共享到Android Wear

Java-将对象从手机共享到Android Wear

作者:互联网

我创建了一个应用.在此应用程序中,您具有包含2个字符串(名称和年龄)和一个位图(头像)的对象.一切都保存到sqlite数据库中.

现在,我希望在智能手表上可以访问这些对象.因此,我想实现可以开始,启动应用程序并向左和向右滚动以查看这些对象的功能.

这意味着我必须从手机上取回物体并将其放在手表旁.

我目前想知道我是否做对了所有事情,还是应该做些不同的事情.每当您在手表上启动该应用程序时,我都会向手机发送我想要这些对象的请求.

private void sendMessage() {
    if(mGoogleApiClient.isConnected()) {
        new Thread( new Runnable() {
            @Override
            public void run() {
                NodeApi.GetConnectedNodesResult nodes = Wearable.NodeApi.getConnectedNodes( mGoogleApiClient ).await();
                for(Node node : nodes.getNodes()) {
                   Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), REQUEST_PET_RETRIEVAL_PATH, null).await();
                }
            }
        }).start();
    }
}

在电话上,我正在接收此消息,并与一个对象一起发送回消息.

public void onMessageReceived(MessageEvent messageEvent) {
    super.onMessageReceived(messageEvent);

    if (messageEvent.getPath().equals(REQUEST_PET_RETRIEVAL_PATH)) {


        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                    @Override
                    public void onConnected(Bundle connectionHint) {
                        final PutDataMapRequest putRequest = PutDataMapRequest.create("/send-pets");
                        final DataMap map = putRequest.getDataMap();

                        File imgFile = new File(obj.getAvatar());

                        Bitmap avatar;
                        if(imgFile.exists()) {
                            avatar = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
                        } else {
                            avatar = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
                        }

                        Asset asset = createAssetFromBitmap(avatar);
                        map.putAsset("avatar", asset);
                        map.putString("name", obj.getName());
                        map.putString("age", obj.getDateOfBirth());
                        Wearable.DataApi.putDataItem(mGoogleApiClient, putRequest.asPutDataRequest());
                    }

                    @Override
                    public void onConnectionSuspended(int cause) {
                    }
                })
                .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
                    @Override
                    public void onConnectionFailed(ConnectionResult result) {
                    }
                })
                .addApi(Wearable.API)
                .build();
        mGoogleApiClient.connect();
    }

然后在手表上取回物体.

public void onDataChanged(DataEventBuffer 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("/send-pets".equals(path)) {
            final DataMap map = DataMapItem.fromDataItem(event.getDataItem()).getDataMap();
            String name = map.getString("name");
            String age = map.getString("age");

            Asset avatar = map.getAsset("avatar");
            Bitmap bitmap = loadBitmapFromAsset(avatar);
        }
    }
}

现在我有两个问题:

1)这是要走的路还是应该以不同的方式解决?

2)是否可以一次发送多个对象,还是只需要在“ onConnected”方法中围绕该部分放置一个循环,然后分别发送每个对象?

解决方法:

是的,这种方法是正确的.

是的,可以发送多个邮件,但您应该注意,它们不是“发送”,它们更像是手机与Wear之间共享或同步的,并且可以在以后的任何时间点进行修改(但是我建议保存它们到Wear上的SharedPreferences即可在离线模式下访问它们.

因此,Message API发送对象(快速,简单),而DataItem API更复杂,但用于更大的数据并在手表和手机之间共享内容.

标签:wear-os,android-wear-data-api,java,android
来源: https://codeday.me/bug/20191121/2048638.html