首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

针对 Android Wear 应用程序的 Bluemix IoT 实时仪表板-2

针对 Android Wear 应用程序的 Bluemix IoT 实时仪表板-2

显示进行活动时的心率打开“HeartRateWearActivity”文件,添加此属性:
1
private HeartRateBroadcastReceiver heartRateBroadcastReceiver;




添加此内部类:
1
2
3
4
5
6
7
8
9
10
11
12
13
private class HeartRateBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
// ahr
Log.v(this.getClass().getName(), "Value Recieved");
if (arg1.getAction().equals("heartRateAction")) {
float hr = arg1.getFloatExtra("HeartRate", 0);
if (HeartRateWearActivity.this.mTextView != null) {
HeartRateWearActivity.this.mTextView.setText("Heart Rate : " + hr);
}
}
}
}




添加以下方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Override
protected void onStart() {
// initialize the broadcast recieiver
heartRateBroadcastReceiver = new HeartRateBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("heartRateAction");
registerReceiver(heartRateBroadcastReceiver, intentFilter);

// start HeartRateWearService
startService(new Intent(this, HeartRateWearService.class));
super.onStart();
}

@Override
protected void onStop() {
unregisterReceiver(heartRateBroadcastReceiver);
stopService(new Intent(this, HeartRateWearService.class));
super.onStop();
}




将心率发送给移动应用程序更新 Wear 应用程序以发送心率打开“HeartRateWearService”,添加属性:
1
2
private GoogleApiClient googleApiClient;
private ExecutorService executorService;




在“onCreate”函数中初始化 executorService:
1
2
3
4
5
6
@Override
public void onCreate() {


executorService = Executors.newCachedThreadPool();
}




添加以下函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
private boolean isConnected() {
if (googleApiClient == null)
googleApiClient = new GoogleApiClient.Builder(this.getApplication().getApplicationContext()).addApi(Wearable.API).build();

if (googleApiClient.isConnected()) {
return true;
}

ConnectionResult result = googleApiClient.blockingConnect(15000, TimeUnit.MILLISECONDS);
return result.isSuccess();
}

private void sendToMobile(final SensorEvent event) {
executorService.submit(new Runnable() {
@Override
public void run() {
  
PutDataMapRequest dataMap = PutDataMapRequest.create("/sensor/heartRate");
dataMap.getDataMap().putLong("timestamp", event.timestamp);
dataMap.getDataMap().putFloat("value", event.values[0]);
PutDataRequest putDataRequest = dataMap.asPutDataRequest();
if (isConnected()) {
Wearable.DataApi.putDataItem(googleApiClient, putDataRequest).setResultCallback(new ResultCallback<DataApi.DataItemResult>() {
@Override
public void onResult(DataApi.DataItemResult dataItemResult) {
Log.v(this.getClass().getName(), "Sending heartRate: " + dataItemResult.getStatus().isSuccess());
}
});
}
}
});
}




在“onSensorChanged”函数中添加此指令:
1
2
3
4
5
6
@Override
public void onSensorChanged(SensorEvent event) {


sendToMobile(event);
}




更新移动活动在“mobile”string.xml 文件中添加一个标签:
1
<string name="heartRateText">Heart Rate : N/A</string>




打开移动布局“activity_heart_rate_mobile.xml”,然后使用“heartRateTextView”更改“id”字段,并使用“@string/heartRateText”更改“text”字段。
创建一个新的移动服务在移动模块中创建一个新服务“HeartRateMobileWearableListenerService”。
更新移动清单:
1
2
3
4
5
<service android:name=".HeartRateMobileWearableListenerService" >
<intent-filter>
<action android:name="com.google.android.gms.wearable.BIND_LISTENER"/>
</intent-filter>
</service>




更改“HeartRateMobileWearableListenerService”代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class HeartRateMobileWearableListenerService extends WearableListenerService {
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
Log.d(this.getClass().getName(), "onDataChanged()");
for (DataEvent dataEvent : dataEvents) {
if (dataEvent.getType() == DataEvent.TYPE_CHANGED) {
DataItem dataItem = dataEvent.getDataItem();
Uri uri = dataItem.getUri();
String path = uri.getPath();
if (path.equals("/sensor/heartRate")) {
DataMap map = DataMapItem.fromDataItem(dataItem).getDataMap();
long timestamp = map.getLong("timestamp");
float value = map.getFloat("value");
Intent intent = new Intent();
intent.setAction("heartRateAction");
intent.putExtra("HeartRate", value);
sendBroadcast(intent);
}
}
}
}
}




显示进行移动活动时的心率打开“HeartRateMobileActivity”,添加此属性:
1
private HeartRateBroadcastReceiver heartRateBroadcastReceiver;




添加此内部类:
1
2
3
4
5
6
7
8
9
10
11
private class HeartRateBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
// ahr
Log.v(this.getClass().getName(), "Value Recieved");
if (arg1.getAction().equals("heartRateAction")) {
float hr = arg1.getFloatExtra("HeartRate", 0);
((TextView)HeartRateMobileActivity.this.findViewById(R.id.heartRateTextView)).setText("Heart Rate : " + hr);
}
}
}




添加“onStart”函数:
1
2
3
4
5
6
7
8
9
@Override
protected void onStart() {
super.onStart();
// ahr
heartRateBroadcastReceiver = new HeartRateBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("heartRateAction");
registerReceiver(heartRateBroadcastReceiver, intentFilter);
}

返回列表