import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
-import android.os.Handler;
import android.os.IBinder;
-import android.os.RemoteException;
import android.util.SparseArray;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import com.ic.aidl.blood.BloodState;
-import com.ic.aidl.blood.IBloodAidlInterface;
-import com.ic.aidl.blood.IBloodRemoteService;
import com.ic.blood.R;
import com.ic.blood.util.IcLog;
-import com.ic.blood.util.ServiceUtil;
import com.ic.blood.util.SystemUtils;
+import com.ic.work.IHeartRateSensorCallback;
+import com.ic.work.IHeartRateSensorService;
+import com.ic.work.domain.HeartRate;
public class BloodPresenter {
private static final String TAG = "BloodPresenter";
public static final String ACTION_ANTI_OFF0 = "com.ic.ACTION_ANTIOFF";
+ public static final String ACTION_HEART_RATE = "com.ic.sensor.data.action.HEART_RATE";
private Context mContext;
private MutableLiveData<Integer> mObsCheckEnd;
private MutableLiveData<String[]> mObsBloodTempValue;
- private IBloodRemoteService mService;
+ private IHeartRateSensorService mService;
private SparseArray<String> mTipsSpares;
//判断有没有配戴的,如果没有配戴的话,就不更新数据了
private boolean mHasWear = false;
+ private boolean mBind;
public BloodPresenter(Context context) {
this.mContext = context;
- mTipsSpares = new SparseArray<String>();
+ mTipsSpares = new SparseArray<>();
mTipsSpares.put(BloodState.BLOOD_NULL_TIPS, "");
mTipsSpares.put(BloodState.BLOOD_NOT_DEVICE, context.getString(R.string.tips_not_device));
mTipsSpares.put(BloodState.BLOOD_PLEASE_QUIET, context.getString(R.string.tips_quiet_please));
}
};
+ /**
+ * 绑定远程服务
+ */
private void bindRemoteService() {
- ServiceUtil.bindServiceUtil(mContext,
- "com.ic.action.WORK_SERVICE",
- connection,
- mContext.getPackageName());
+ Intent intent = new Intent();
+ intent.setAction(ACTION_HEART_RATE);
+ mBind = mContext.bindService(intent, connection, Context.BIND_AUTO_CREATE);
}
public void release() {
try {
if (mService != null) {
- mService.unregisterCallback(bloodInterface);
+ IcLog.d(TAG, "unRegister blood remote callback...");
+ mService.unRegisterCallback(bloodInterface);
}
- ServiceUtil.unBindServiceUtil(mContext, connection);
+ mContext.unbindService(connection);
} catch (Exception e) {
IcLog.e(TAG, "unregisterScreenReceiver", e);
} finally {
}
public void startCheckBlood() {
+ IcLog.d(TAG, "startCheckBlood...");
if (mService != null) {
mObsStateTips.postValue(mContext.getString(R.string.tips_ing_check));
//处理UI变化
try {
- mService.startCheckBlood();
+ /**
+ * SERVER_CMD(0)服务端单次测量指令,
+ * ALARM_CMD(1)定时的测试指,
+ * CLIENT_CMD(2)用户UI主动的指令;
+ */
+ mService.getHeartRateInfo(2, BloodPresenter.class.getName());
} catch (Exception e) {
IcLog.e(TAG, "startCheckBlood", e);
}
}
}
- public void stopCheckBlood() {
- if (mService != null) {
- try {
- mService.stopCheckBlood();
- } catch (Exception e) {
- IcLog.e(TAG, "stopCheckBlood", e);
- }
- }
- }
-
-
private void updateTipsInfo(String t, String b) {
if (mObsTipsInfo != null) {
mObsTipsInfo.postValue(new String[]{t, b});
private ServiceConnection connection = new ServiceConnection() {
+
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
+ IcLog.d(TAG, "onService onServiceConnected...");
try {
- mService = IBloodRemoteService.Stub.asInterface(service);
- mService.registerCallback(bloodInterface);
+ mService = IHeartRateSensorService.Stub.asInterface(service);
+ mService.registerCallback(bloodInterface, BloodPresenter.class.getName());
startCheckBlood();
} catch (Exception e) {
IcLog.e(TAG, "ServiceConnection", e);
@Override
public void onServiceDisconnected(ComponentName name) {
+ mService = null;
}
};
- private IBloodAidlInterface.Stub bloodInterface = new IBloodAidlInterface.Stub() {
+ private IHeartRateSensorCallback.Stub bloodInterface = new IHeartRateSensorCallback.Stub() {
@Override
- public void updateBloodCheckTemp(int high, int low, int heart, int oxygen) throws RemoteException {
+ public void onHeartRateGet(HeartRate heartRate) {
+ IcLog.d(TAG, "final result -- > "
+ + heartRate.getBloodHeight() + " low == > " + heartRate.getBloodLow() +
+ " heart === > " + heartRate.getHeartRate()
+ + " oxygen == > " + heartRate.getOxygen());
+ //最终结果
+ updateBoolValue(heartRate.getHeartRate(), heartRate.getBloodLow(),
+ heartRate.getHeartRate(), heartRate.getOxygen());
+ mObsStateTips.postValue(mContext.getString(R.string.tips_finish_check));
+ }
+
+ @Override
+ public void onHeartRateUpdate(HeartRate heartRate) {
//如果当前不有配戴,就不更新了
+ IcLog.d(TAG, "updating -- > "
+ + heartRate.getBloodHeight() + " low == > " + heartRate.getBloodLow() +
+ " heart === > " + heartRate.getHeartRate()
+ + " oxygen == > " + heartRate.getOxygen());
if (!mHasWear) {
- IcLog.d(TAG, "have't wear device height -- > "
- + high + " low == > " + low +
- " heart === > " + heart
- + " oxygen == > " + oxygen);
mObsStateTips.postValue(mContext.getString(R.string.tips_not_wear));
return;
}
//测试的数值
mObsBloodTempValue.postValue(new String[]{
- String.valueOf(high),
- String.valueOf(low),
- String.valueOf(heart),
- String.valueOf(oxygen)});
+ String.valueOf(heartRate.getBloodHeight()),
+ String.valueOf(heartRate.getBloodLow()),
+ String.valueOf(heartRate.getHeartRate()),
+ String.valueOf(heartRate.getOxygen())});
mObsStateTips.postValue(mContext.getString(R.string.tips_ing_check));
}
@Override
- public void updateBloodCheckResult(int high, int low, int heart, int oxygen) throws RemoteException {
- //最终结果
- updateBoolValue(high, low, heart, oxygen);
- mObsStateTips.postValue(mContext.getString(R.string.tips_finish_check));
+ public void onGettingData() {
+ //todo:让UI显示正在测试
+ IcLog.d(TAG, "正在获取数据...");
}
@Override
- public void updateBloodCheckTips(int top, int bottom) throws RemoteException {
- updateTipsInfo(mTipsSpares.get(top), mTipsSpares.get(bottom));
+ public void onWaiting() {
+ IcLog.d(TAG, "任务正在等待...");
+ //updateTipsInfo(mTipsSpares.get(top), mTipsSpares.get(bottom));
+ //让UI显示保持安静,准备测试的玩意
}
+
};
--- /dev/null
+package com.ic.work.domain;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class HeartRate implements Parcelable {
+ //From,有时候是用户测试,主动通知服务器的
+ private int from;
+ //血压高值
+ private int bloodHeight;
+ //血压低值
+ private int bloodLow;
+ //心跳
+ private int heartRate;
+ //血氧值
+ private int oxygen;
+
+ public HeartRate(int bloodHeight, int bloodLow, int heartRate, int oxygen) {
+ this.bloodHeight = bloodHeight;
+ this.bloodLow = bloodLow;
+ this.heartRate = heartRate;
+ this.oxygen = oxygen;
+ }
+
+ public int getFrom() {
+ return from;
+ }
+
+ public void setFrom(int from) {
+ this.from = from;
+ }
+
+ public int getBloodHeight() {
+ return bloodHeight;
+ }
+
+ public void setBloodHeight(int bloodHeight) {
+ this.bloodHeight = bloodHeight;
+ }
+
+ public int getBloodLow() {
+ return bloodLow;
+ }
+
+ public void setBloodLow(int bloodLow) {
+ this.bloodLow = bloodLow;
+ }
+
+ public int getHeartRate() {
+ return heartRate;
+ }
+
+ public void setHeartRate(int heartRate) {
+ this.heartRate = heartRate;
+ }
+
+ public int getOxygen() {
+ return oxygen;
+ }
+
+ public void setOxygen(int oxygen) {
+ this.oxygen = oxygen;
+ }
+
+ public static Creator<HeartRate> getCREATOR() {
+ return CREATOR;
+ }
+
+ protected HeartRate(Parcel in) {
+ from = in.readInt();
+ bloodHeight = in.readInt();
+ bloodLow = in.readInt();
+ heartRate = in.readInt();
+ oxygen = in.readInt();
+ }
+
+ public static final Creator<HeartRate> CREATOR = new Creator<HeartRate>() {
+ @Override
+ public HeartRate createFromParcel(Parcel in) {
+ return new HeartRate(in);
+ }
+
+ @Override
+ public HeartRate[] newArray(int size) {
+ return new HeartRate[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(from);
+ dest.writeInt(bloodHeight);
+ dest.writeInt(bloodLow);
+ dest.writeInt(heartRate);
+ dest.writeInt(oxygen);
+ }
+}