To make sure the Microsoft Band is connected to your phone, download the Microsoft Band and connect it in the app, also keep the bluetooth on.
private boolean getConnectBand() throws BandException, InterruptedException {
if(client == null){
BandInfo[] devices = BandClientManager.getInstance().getPairedBands();
if (devices.length == 0){
// Toast.makeText(getApplicationContext(), "No device detected", Toast.LENGTH_LONG).show();
return false;
}
client = BandClientManager.getInstance().create(getApplicationContext(), devices[0]);
}else if(ConnectionState.CONNECTED == client.getConnectionState()){
return true;
}
return ConnectionState.CONNECTED == client.connect().await();
}
Function for consenting reading heartrate.
private class HeartRateConsentTask extends AsyncTask<WeakReference<Activity>, Void, Void> {
@Override
protected Void doInBackground(WeakReference<Activity>... weakReferences) {
try{
if(getConnectBand()){
if(weakReferences[0].get() != null){
client.getSensorManager().requestHeartRateConsent(weakReferences[0].get(), new HeartRateConsentListener() {
@Override
public void userAccepted(boolean b) {
}
});
}
}else {
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BandException e) {
e.printStackTrace();
}
return null;
}
}
In your onclick() event, call HeartRateConsentTask.execute().
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.microsoft);
final WeakReference<Activity> reference = new WeakReference<Activity>(this);
consent = findViewById(R.id.consent);
consent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new MicrosoftBand.HeartRateConsentTask().execute(reference);
}
});
}
There will be a pop window asking for Yes or No, click yes to consent.
Define HeartRateSubscriptionTask to assign the job.
private class HeartRateSubscriptionTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
try {
if(getConnectBand()) {
if (client.getSensorManager().getCurrentHeartRateConsent() == UserConsent.GRANTED) {
client.getSensorManager().registerHeartRateEventListener(bandHeartRateEventListener);
}
}
} catch (BandException e) {
e.printStackTrace();
return null;
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
}
And in your event for start listening, call HeartRateSubscriptionTask:
private HeartRateSubscriptionTask mHeartRateSubscriptionTask;
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mHeartRateSubscriptionTask = new MicrosoftBand.HeartRateSubscriptionTask();
mHeartRateSubscriptionTask.execute();
}
});
Define a BandHeartRateEventListener to keep reading the heartrate values.
private BandHeartRateEventListener bandHeartRateEventListener = new BandHeartRateEventListener() {
@Override
public void onBandHeartRateChanged(BandHeartRateEvent bandHeartRateEvent) {
if(bandHeartRateEvent != null){
Log.v("HeartRate", bandHeartRateEvent.getHeartRate()+"");
}
}
};