I know this can be quite simple a question and many people have asked the same question but still I have problem in getting the heart rate. Of course I have done so much research for the solution.
Generally, for using a heart rate sensor, we need get the permission and use sensormanager and need registerListener for the sensor in mainActivity.
Some have said here for SDK 23 or higher, we need declare the permission separately but till present I develop only the part of Android Wear and there is nothing about the phone.
And I have also tried reinstall and rerun the application. All these methods don't work for me.
Here is my code, all I want is showing the heart rate on the watch.
AWHeartRateSensor\wear\src\main\java\com\example\android\awheartratesensor\MainActivity.java
package com.example.android.awheartratesensor;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.support.wearable.view.WatchViewStub;
import android.util.Log;
import android.widget.TextView;
import static com.google.android.gms.wearable.DataMap.TAG;
public class MainActivity extends Activity {
private SensorManager mSensorManager;
private Sensor mHeartSensor;
private TextView mTextView;
WatchViewStub mStub;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mStub = (WatchViewStub) findViewById(R.id.watch_view_stub);
mStub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
@Override
public void onLayoutInflated(WatchViewStub stub) {
mTextView = (TextView) stub.findViewById(R.id.text);
mTextView.setText("I am here");
}
});
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mHeartSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
mStub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
@Override
public void onLayoutInflated(WatchViewStub stub) {
mTextView = (TextView) stub.findViewById(R.id.text);
mTextView.setText("I have the sensor manager");
}
});
}
protected void onResume() {
super.onResume();
mSensorManager.registerListener(mSensorEventListener, mHeartSensor, SensorManager.SENSOR_DELAY_NORMAL);
}
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(mSensorEventListener);
}
private SensorEventListener mSensorEventListener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
final SensorEvent event1=event;
mStub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
@Override
public void onLayoutInflated(WatchViewStub stub) {
mTextView = (TextView) stub.findViewById(R.id.text);
mTextView.setText(Float.toString(event1.values[0]));
}
});
}
};
}
Here is the manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.awheartratesensor">
<uses-feature android:name="android.hardware.type.watch" />
<uses-permission android:name="android.permission.BODY_SENSORS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@android:style/Theme.DeviceDefault">
<uses-sdk android:minSdkVersion="23"
android:targetSdkVersion="23"
/>
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>