将数据发送到Android设备的磨损 [英] Sending data to android wear device

查看:122
本文介绍了将数据发送到Android设备的磨损的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从我的手机发送一个字符串数组来我穿, 我创建了应该将数据与此code送我的手机服务:

I'm trying to send a String array from my phone to my wear, I've created a service on my phone that is supposed to send the data with this code :

public class SendDataService extends Service {

private static final String TAG = "SendDataService";

@Override
public void onCreate(){
    GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                @Override
                public void onConnected(Bundle connectionHint) {
                    Log.d(TAG, "onConnected: " + connectionHint);
                    // Now you can use the data layer API
                }
                @Override
                public void onConnectionSuspended(int cause) {
                    Log.d(TAG, "onConnectionSuspended: " + cause);
                }
            })
            .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(ConnectionResult result) {
                    Log.d(TAG, "onConnectionFailed: " + result);
                }
            })
            .addApi(Wearable.API)
            .build();
    mGoogleApiClient.connect();
    String[] eventStrings = Events.eventsString(Events.readCalendarEvent(this));
    PutDataMapRequest dataMap = PutDataMapRequest.create("/events");
    dataMap.getDataMap().putStringArray("events", eventStrings);
    PutDataRequest request = dataMap.asPutDataRequest();
    PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi
            .putDataItem(mGoogleApiClient, request);
    mGoogleApiClient.disconnect();
}

和从表我设法得到它在我的这个code主要活动:

and from the watch I try to get it in my main activity with this code :

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_agenda_wear);
    this.context = this;
    GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                @Override
                public void onConnected(Bundle connectionHint) {
                    Log.d(TAG, "onConnected: " + connectionHint);
                    // Now you can use the data layer API
                }
                @Override
                public void onConnectionSuspended(int cause) {
                    Log.d(TAG, "onConnectionSuspended: " + cause);
                }
            })
            .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(ConnectionResult result) {
                    Log.d(TAG, "onConnectionFailed: " + result);
                }
            })
            .addApi(Wearable.API)
            .build();
    mGoogleApiClient.connect();


    PendingResult<DataItemBuffer> results = Wearable.DataApi.getDataItems(mGoogleApiClient);
    results.setResultCallback(new ResultCallback<DataItemBuffer>() {
        @Override
        public void onResult(DataItemBuffer dataItems) {
            if (dataItems.getCount() != 0) {
                DataMapItem dataMapItem = DataMapItem.fromDataItem(dataItems.get(0));

                // This should read the correct value.
                AgendaWear.this.eventString = dataMapItem.getDataMap().getStringArray("events");
            }

            dataItems.release();
        }
    });
    mGoogleApiClient.disconnect();
    final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);
    stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
        @Override
        public void onLayoutInflated(WatchViewStub stub) {
            if (AgendaWear.this.eventString == null){
                Toast.makeText(AgendaWear.this, "No data",Toast.LENGTH_LONG).show();
                AgendaWear.this.eventString = new String[0];
            }
            AgendaWear.listItems = eventArray(AgendaWear.this.eventString);
            mListView = (WearableListView) stub.findViewById(R.id.listView);
            mListView.setAdapter(new MyAdapter(AgendaWear.this));
            mListView.setClickListener(AgendaWear.this);
        }
    });
}

但不幸的是,我总是得到无数据面包和我在这里有点卡住了,我也行&LT;元数据的android:NAME =com.google.android。 gms.version机器人:值=@整数/ google_play_services_version/&GT; 双方的磨损和我的应用程序的移动部分,但我似乎并没有得到任何数据。 预先感谢您的帮助

But unfortunately, I always get the "no data" toast and I'm a bit stuck here, I have the line<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> on both the wear and mobile part of my app, but I don't seem to get any data. Thank you in advance for your help

推荐答案

也许我可以帮忙。

这code对我的作品,将一个字符串数组从可穿戴要接收的设备:

This code works for me, sends an array of strings from the device to be received in the wearable:

设备code:

@Override
public void onCreate() {

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

    googleApiClient.connect();
}    


@Override
public void onConnected(Bundle bundle) {

  String [] myData = new String[]{"data1", "data2", "data3"};
  new DataTask (getActivity(), myData, myListener).execute();
}


class DataTask  extends AsyncTask<Node, Void, Void> {

    private final String[] contents;
    private MyListener myListener;
    Context c;

    public DataTask (Context c, String [] contents, MyListener myListener) {
        this.c = c;
        this.contents = contents;
        this.myListener = myListener;
    }

    @Override
    protected Void doInBackground(Node... nodes) {

        PutDataMapRequest dataMap = PutDataMapRequest.create ("/myapp/myevent");
        dataMap.getDataMap().putStringArray("contents", contents);

        PutDataRequest request = dataMap.asPutDataRequest();

        DataApi.DataItemResult dataItemResult = Wearable.DataApi
                .putDataItem(googleApiClient, request).await();


        Log.d ("[DEBUG] SendDataCoolTask - doInBackground", "/myapp/myevent" status, "+getStatus());
        return null;
    }
}

耐磨code:

Wearable code:

@Override
public void onConnected(Bundle bundle) {

    Wearable.DataApi.addListener(googleApiClient, this);
}

    @Override
public void onDataChanged(DataEventBuffer dataEvents) {

    for (DataEvent event: dataEvents) {

        Log.d("[DEBUG] DeviceService - onDataChanged",
                "Event received: " + event.getDataItem().getUri());

        String eventUri = event.getDataItem().getUri().toString();

        if (eventUri.contains ("/myapp/myevent")) {

            DataMapItem dataItem = DataMapItem.fromDataItem (event.getDataItem());
            String[] data = dataItem.getDataMap().getStringArray("contents");

            Log.d("[DEBUG] DeviceService - onDataChanged", "Sending timeline to the listener");

            myListener.onDataReceived(data);
        }
    }
}

这篇关于将数据发送到Android设备的磨损的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆