Android Wear 手机与手表数据通讯( 二 )


wear应用接收数据:
在手表端接收消息后,将时间格式化,并用Toast展示出来 。
package com.lyan.test;import android.app.Activity;import android.net.Uri;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.wearable.view.WatchViewStub;import android.widget.TextView;import android.widget.Toast;import com.google.android.gms.common.api.GoogleApiClient;import com.google.android.gms.wearable.DataApi;import com.google.android.gms.wearable.DataEvent;import com.google.android.gms.wearable.DataEventBuffer;import com.google.android.gms.wearable.DataMap;import com.google.android.gms.wearable.DataMapItem;import com.google.android.gms.wearable.Wearable;import java.text.SimpleDateFormat;import java.util.Date;public class MainActivity extends Activity implements DataApi.DataListener{private TextView mTextView;private GoogleApiClient googleApiClient;private Handler handler = new Handler(new Handler.Callback() {@Overridepublic boolean handleMessage(Message msg) {if (msg.what == 1){SimpleDateFormat format = new SimpleDateFormat("yy年MM月dd日 HH时mm分ss秒");String time = format.format(new Date((long) msg.obj));//格式化时间Toast.makeText(getApplicationContext(),"在" + time + ",来了条消息",Toast.LENGTH_SHORT).show();}return false;}});@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {@Overridepublic void onLayoutInflated(WatchViewStub stub) {mTextView = (TextView) stub.findViewById(R.id.text);}});googleApiClient = new GoogleApiClient.Builder(this).addApi(Wearable.API).build();googleApiClient.connect();//开启连接Wearable.DataApi.addListener(googleApiClient,this);//添加消息变化的监听}@Overridepublic void onDataChanged(DataEventBuffer dataEventBuffer) {for(DataEvent event : dataEventBuffer) {Uri uri = event.getDataItem().getUri();//获取消息的uriString path = uri!=null ? uri.getPath() : null;//获取标识if("/KEY".equals(path)) {DataMap map = DataMapItem.fromDataItem(event.getDataItem()).getDataMap();long time = map.getLong("time");//获取消息内容handler.obtainMessage(1,time).sendToTarget();}}}}

Android Wear 手机与手表数据通讯

文章插图
【运行效果】
Android Wear 手机与手表数据通讯

文章插图
五、通过手表向手机发送数据
其实无论是手机向手表传递数据,还是手表向手机传递数据用法都是一样的 。这里将会使用ice来接收数据 。
wear应用发送数据:
当点击文本后,手表端会发送出一条消息 。
package com.lyan.test;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.support.wearable.view.WatchViewStub;import android.view.View;import android.widget.TextView;import com.google.android.gms.common.api.GoogleApiClient;import com.google.android.gms.wearable.DataMap;import com.google.android.gms.wearable.PutDataMapRequest;import com.google.android.gms.wearable.Wearable;public class MainActivity extends Activity implements View.OnClickListener{private TextView mTextView;private GoogleApiClient googleApiClient;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {@Overridepublic void onLayoutInflated(WatchViewStub stub) {mTextView = (TextView) stub.findViewById(R.id.text);mTextView.setText("向手机发送数据");//设置文本内容mTextView.setBackgroundColor(Color.WHITE);//设置文本背景颜色mTextView.setTextColor(Color.BLACK);//设置文本字体颜色mTextView.setOnClickListener(MainActivity.this);//设置点击事件}});googleApiClient = new GoogleApiClient.Builder(this).addApi(Wearable.API).build();googleApiClient.connect();//开启连接}/*** 点击事件* @param v*/@Overridepublic void onClick(View v) {PutDataMapRequest dataMapRequest = PutDataMapRequest.create("/KEY");//使用KEY来过滤DataMap dataMap = dataMapRequest.getDataMap();//获取消息的载体dataMap.putLong("time" , System.currentTimeMillis());//传递点击按钮的时间Wearable.DataApi.putDataItem(googleApiClient,dataMapRequest.asPutDataRequest());//发送数据}}