向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。我知道我为此附加了侦听器。