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


moble应用接收数据:
使用ice服务来接收消息,随后通过本地广播将数据传递给主界面,最后在主界面的中将接收的数据展示出来 。
1.创建用来接收数据,同时继承ice,并重写()方法 。
package com.lyan.test;import android.content.Intent;import android.net.Uri;import android.support.v4.content.LocalBroadcastManager;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.WearableListenerService;/*** 作者: LYJ* 功能: 接收穿戴设备传递过来的数据* 创建日期: 2017/3/29*/public class MyService extends WearableListenerService{@Overridepublic void onDataChanged(DataEventBuffer dataEvents) {super.onDataChanged(dataEvents);for(DataEvent event : dataEvents) {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");//获取消息内容Intent localIntent = new Intent("phone.localIntent");//发送广播意图localIntent.putExtra("result", time);//添加附加内容//发送本地广播LocalBroadcastManager.getInstance(this).sendBroadcast(localIntent);}}}}
2.在文件中,注册服务并设置服务的过滤条件 。这里我将第二种过滤方式注释掉了,但在使用中请使用第二种过滤方式 。因为第一种方式并不适用与我们下载的play--7.8.87 。(因为第一种方式是在play--7.8.87之后的版本中才被加进来,所以有些功能我们是没办法使用的,比如取消延迟我们就没办法使用,因为play--7.8.87没用这样的开放接口)
android:name=".MyService">
3.在主界面中添加广播接收器,用来接收本地广播,将本地广播中的数据展示在界面上 。
package com.lyan.test;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.support.v4.content.LocalBroadcastManager;import android.support.v7.app.AppCompatActivity;import android.widget.TextView;import com.google.android.gms.common.api.GoogleApiClient;import com.google.android.gms.wearable.Wearable;import java.text.SimpleDateFormat;import java.util.Date;public class MainActivity extends AppCompatActivity {GoogleApiClient googleApiClient;//服务对象private TextView txt;private BroadcastReceiver mResultReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {SimpleDateFormat format = new SimpleDateFormat("yy年MM月dd日 HH时mm分ss秒");String time = format.format(new Date((intent.getLongExtra("result",System.currentTimeMillis()))));//格式化时间txt.setText( "在" + time + ",来了条消息");}};//广播接收器@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);txt = (TextView) findViewById(R.id.test);//创建服务对象googleApiClient = new GoogleApiClient.Builder(this).addApi(Wearable.API).build();googleApiClient.connect();//开始连接LocalBroadcastManager.getInstance(this).registerReceiver(//注册本地广播mResultReceiver, new IntentFilter("phone.localIntent"));}@Overrideprotected void onDestroy() {LocalBroadcastManager.getInstance(this).unregisterReceiver(mResultReceiver);//解除注册广播super.onDestroy();}}