向android wear设备发送数据

向android wear设备发送数据,android,wear-os,android-wear-data-api,Android,Wear Os,Android Wear Data Api,我正试图从我的手机发送一个字符串数组到我的衣服, 我在手机上创建了一项服务,该服务应使用以下代码发送数据: public class SendDataService extends Service { private static final String TAG = "SendDataService"; @Override public void onCreate(){ GoogleApiClient mGoogleApiClient = new GoogleApiClient.B

我正试图从我的手机发送一个字符串数组到我的衣服, 我在手机上创建了一项服务,该服务应使用以下代码发送数据:

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();
}
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);
        }
    });
}
公共类SendDataService扩展服务{
私有静态最终字符串标记=“SendDataService”;
@凌驾
public void onCreate(){
GoogleAppClient mgoogleAppClient=新的GoogleAppClient.Builder(此)
.addConnectionCallbacks(新的GoogleAppClient.ConnectionCallbacks(){
@凌驾
未连接的公共无效(捆绑连接提示){
Log.d(标记“onConnected:+connectionHint”);
//现在您可以使用数据层API了
}
@凌驾
连接上的公共无效已暂停(内部原因){
日志d(标签“onConnectionSuspended:+原因”);
}
})
.addOnConnectionFailedListener(新的GoogleAppClient.OnConnectionFailedListener(){
@凌驾
连接失败的公共void(连接结果){
Log.d(标记“onConnectionFailed:+结果”);
}
})
.addApi(可穿戴的.API)
.build();
mGoogleApiClient.connect();
String[]EventString=Events.eventsString(Events.readCalendarEvent(this));
PutDataMapRequestDataMap=PutDataMapRequest.create(“/events”);
dataMap.getDataMap().putStringArray(“事件”,eventStrings);
PutDataRequest=dataMap.asPutDataRequest();
Pendingreult Pendingreult=可穿戴。数据API
.putDataItem(mgoogleapClient,请求);
mGoogleApiClient.disconnect();
}
从手表上看,我试图通过以下代码将其纳入我的主要活动:

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();
}
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);
        }
    });
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u agenda\u wear);
this.context=this;
GoogleAppClient mgoogleAppClient=新的GoogleAppClient.Builder(此)
.addConnectionCallbacks(新的GoogleAppClient.ConnectionCallbacks(){
@凌驾
未连接的公共无效(捆绑连接提示){
Log.d(标记“onConnected:+connectionHint”);
//现在您可以使用数据层API了
}
@凌驾
连接上的公共无效已暂停(内部原因){
日志d(标签“onConnectionSuspended:+原因”);
}
})
.addOnConnectionFailedListener(新的GoogleAppClient.OnConnectionFailedListener(){
@凌驾
连接失败的公共void(连接结果){
Log.d(标记“onConnectionFailed:+结果”);
}
})
.addApi(可穿戴的.API)
.build();
mGoogleApiClient.connect();
Pendingreult results=Wearable.DataApi.getDataItems(mGoogleApiClient);
results.setResultCallback(新的ResultCallback(){
@凌驾
public void onResult(DataItemBuffer dataItems){
如果(dataItems.getCount()!=0){
DataMapItem DataMapItem=DataMapItem.fromDataItem(dataItems.get(0));
//这应该读取正确的值。
AgendaWear.this.eventString=dataMapItem.getDataMap().getStringArray(“事件”);
}
dataItems.release();
}
});
mGoogleApiClient.disconnect();
最终的WatchViewStub存根=(WatchViewStub)findViewById(R.id.watch\u view\u存根);
stub.setOnlayOutingFlatedListener(新的WatchViewStub.OnlayOutingFlatedListener(){
@凌驾
仅限公共空间布局平坦(WatchViewStub){
if(AgendaWear.this.eventString==null){
Toast.makeText(AgendaWear.this,“无数据”,Toast.LENGTH_LONG.show();
AgendaWear.this.eventString=新字符串[0];
}
AgendaWear.listItems=eventArray(AgendaWear.this.eventString);
mListView=(WearableListView)stub.findViewById(R.id.listView);
setAdapter(新的MyAdapter(AgendaWear.this));
mListView.setClickListener(AgendaWear.this);
}
});
}
但不幸的是,我总是得到“无数据”的祝酒词,我有点被困在这里,我的应用程序的磨损和移动部分都有一行
,但我似乎没有得到任何数据。 提前感谢您的帮助

也许我能帮忙

此代码对我有效,从设备发送字符串数组,以便在可穿戴设备中接收:

设备代码:

@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;
    }
}

谢谢你的回答,但有些东西我还是不明白,在你的设备代码上,什么是节点侦听器和时间线数据,当你把字符串数组放入内容中时,你怎么称呼它?在你的移动代码上,这应该像我一样在addconnectioncallback中吗?我做了一些更改,重复addConnectionCallbaks,我的类是impl校正该接口时,当调用OnConnect时,在设备上调用datatTask,在可穿戴设备上使用dataListener我还有几个问题,我是否必须创建MyListener类?我必须在其中添加什么?我将该类放在何处?在可穿戴设备或手机上?如何在磨损端初始化它?你有一个称为状态的符号,它从来没有在设备代码上初始化过,你如何初始化它?谢谢你宝贵的帮助,我想我正在接近它我在没有MyListener的情况下可以工作,真的谢谢你的帮助我尝试了所有方法,但无法让代码工作。移动客户端说“D/[DEBUG]SendDataCoolTask-doInBackground﹕ /myapp/myevent statusStatus{statusCode=SUCCESS,resolution=null}”,但可穿戴设备不会触发onDataChanged。我知道我为此附加了侦听器。