環境
Windows 10 Pro
Android Studio最新版
スマートフォン : Zenfone 2 laser
スマートウォッチ : TicWatch Pro(APIレベル 26)
やりたいこと
スマートウォッチで、心拍数を”リアルタイム”で計測したい
よろしくお願いします
問題
ネット上の記事を参考に作ってみたが、動作しない
原因も思い当たるものがない
(エラー等はなし)
ソースコード
java
1package com.websarva.wings.android.lifesaver; 2 3import android.hardware.Sensor; 4import android.hardware.SensorEvent; 5import android.hardware.SensorEventListener; 6import android.hardware.SensorManager; 7import android.os.Bundle; 8import android.os.Handler; 9import android.os.Message; 10import android.support.wearable.activity.WearableActivity; 11import android.support.wearable.input.WearableButtons; 12import android.view.View; 13import android.widget.Button; 14import android.widget.EditText; 15import android.widget.TextView; 16 17import com.google.android.gms.tasks.Task; 18import com.google.android.gms.tasks.Tasks; 19import com.google.android.gms.wearable.DataClient; 20import com.google.android.gms.wearable.DataEvent; 21import com.google.android.gms.wearable.DataEventBuffer; 22import com.google.android.gms.wearable.DataItem; 23import com.google.android.gms.wearable.DataMap; 24import com.google.android.gms.wearable.DataMapItem; 25import com.google.android.gms.wearable.PutDataMapRequest; 26import com.google.android.gms.wearable.PutDataRequest; 27import com.google.android.gms.wearable.Wearable; 28 29import java.text.DateFormat; 30import java.text.SimpleDateFormat; 31 32public class MainActivity extends WearableActivity implements DataClient.OnDataChangedListener, 33 SensorEventListener{ 34 35 private static final String HEART_RATE_KEY = "heart_late"; 36 private static final String HEART_RATE_PATH = "/lifesaver/wear/heart"; 37 38 private static final String GENERAL_MESSAGE_KEY_WEAR = "message_from_wear"; 39 private static final String GENERAL_MESSAGE_PATH_WEAR = "/lifesaver/wear/message"; 40 41 private static final String GENERAL_MESSAGE_KEY_ANDROID = "message_from_android"; 42 private static final String GENERAL_MESSAGE_PATH_ANDROID = "/lifesaver/android/message"; 43 44 SensorManager heartRateManager; 45 Sensor heartRateSensor; 46 47 TextView tvStatus, tvHeartRate; 48 EditText etMessage; 49 Button btSend, btSync, btClear; 50 51 52 @Override 53 protected void onCreate(Bundle savedInstanceState) { 54 super.onCreate(savedInstanceState); 55 setContentView(R.layout.activity_main); 56 // Enables Always-on 57 setAmbientEnabled(); 58 59 tvStatus = findViewById(R.id.tvStatus); 60 tvHeartRate = findViewById(R.id.tvHeartRate); 61 etMessage = findViewById(R.id.etMessage); 62 btSend = findViewById(R.id.btSendMessage); 63 btSync = findViewById(R.id.btSync); 64 btClear = findViewById(R.id.btClear); 65 66 67 heartRateManager = (SensorManager)getSystemService(SENSOR_SERVICE); 68 heartRateSensor = heartRateManager.getDefaultSensor(Sensor.TYPE_HEART_RATE); 69 } 70 71 72 @Override 73 public void onSensorChanged(SensorEvent event) { 74 if (event.sensor.getType() == Sensor.TYPE_HEART_RATE) { 75 tvHeartRate.setText(String.valueOf(event.values[0])); 76 } 77 } 78 79 80 @Override 81 public void onAccuracyChanged(Sensor sensor, int accuracy) { 82 83 } 84 85 @Override 86 protected void onResume() { 87 super.onResume(); 88 Wearable.getDataClient(this).addListener(this); 89 90 91 heartRateManager.registerListener(this, heartRateSensor, SensorManager.SENSOR_DELAY_NORMAL); 92 Sensor heart = heartRateManager.getDefaultSensor(Sensor.TYPE_HEART_RATE); 93 } 94 95 @Override 96 protected void onPause() { 97 super.onPause(); 98 Wearable.getDataClient(this).removeListener(this); 99 100 heartRateManager.unregisterListener(this); 101// heartRateManager.unregisterListener(mHeartListener); 102 } 103 104 @Override 105 public void onEnterAmbient(Bundle ambientDetails) { 106 super.onEnterAmbient(ambientDetails); 107 updateDisplay(); 108 } 109 110 @Override 111 public void onUpdateAmbient() { 112 super.onUpdateAmbient(); 113 updateDisplay(); 114 } 115 116 @Override 117 public void onExitAmbient() { 118 updateDisplay(); 119 super.onExitAmbient(); 120 } 121 122 private void updateDisplay() { 123 124 } 125 126 @Override 127 public void onDataChanged(DataEventBuffer dataEvents) { 128 for(DataEvent event : dataEvents) { 129 if(event.getType() == DataEvent.TYPE_CHANGED) { 130 //DataItem Changed 131 DataItem item = event.getDataItem(); 132 if (item.getUri().getPath().compareTo(GENERAL_MESSAGE_PATH_ANDROID) == 0) { 133 DataMap dataMap = DataMapItem.fromDataItem(item).getDataMap(); 134 tvStatus.setText(dataMap.getString(GENERAL_MESSAGE_KEY_ANDROID)); 135 } 136 } 137 else if(event.getType() == DataEvent.TYPE_DELETED) { 138 tvStatus.setText("deleted"); 139 } 140 } 141 } 142 143 public void SendMessageToAndroid(String message, String key, String path) { 144 PutDataMapRequest dataMap = PutDataMapRequest.create(path); 145 dataMap.getDataMap().putString(key, message); 146 147 PutDataRequest putDataReq = dataMap.asPutDataRequest(); 148 putDataReq.setUrgent(); 149 Wearable.getDataClient(getApplicationContext()).putDataItem(putDataReq); 150 } 151 152 public void onClickButton(View view) { 153 switch (view.getId()) { 154 case R.id.btSendMessage: 155 String message = etMessage.getText().toString(); 156 SendMessageToAndroid(message, GENERAL_MESSAGE_KEY_WEAR, GENERAL_MESSAGE_PATH_WEAR); 157 break; 158 case R.id.btSync: 159 break; 160 case R.id.btClear: 161 etMessage.setText(""); 162 break; 163 default: 164 break; 165 } 166 } 167}
備考
ソースコードには、別の機能も入っている
あなたの回答
tips
プレビュー