From: kfl_614 Date: Thu, 31 Dec 2020 09:25:00 +0000 (+0800) Subject: refactor remote service callback and service connection. X-Git-Url: http://git.snicker.com.cn/sitemap.xml?a=commitdiff_plain;h=6d834d56558f9fddc7860ef92a0852f5adeb5d96;p=IcBlood.git refactor remote service callback and service connection. --- diff --git a/app/src/main/aidl/com/ic/work/IHeartRateSensorCallback.aidl b/app/src/main/aidl/com/ic/work/IHeartRateSensorCallback.aidl new file mode 100644 index 0000000..12554f5 --- /dev/null +++ b/app/src/main/aidl/com/ic/work/IHeartRateSensorCallback.aidl @@ -0,0 +1,16 @@ +// IHeartRateSensorCallback.aidl +package com.ic.work; + + +import com.ic.work.domain.HeartRate; + +interface IHeartRateSensorCallback { + //获取到了数据,最终数据 + void onHeartRateGet(in HeartRate heartRate); + //数据更新中 + void onHeartRateUpdate(in HeartRate heartRate); + //正在获取数据 + void onGettingData(); + //等待中 + void onWaiting(); +} \ No newline at end of file diff --git a/app/src/main/aidl/com/ic/work/IHeartRateSensorService.aidl b/app/src/main/aidl/com/ic/work/IHeartRateSensorService.aidl new file mode 100644 index 0000000..10af642 --- /dev/null +++ b/app/src/main/aidl/com/ic/work/IHeartRateSensorService.aidl @@ -0,0 +1,13 @@ +// IHeartRateSensorService.aidl +package com.ic.work; + +import com.ic.work.IHeartRateSensorCallback; + +interface IHeartRateSensorService { + //注册接口 + void registerCallback(in IHeartRateSensorCallback callback,in String callbackTag); + //取消接口注册 + void unRegisterCallback(in IHeartRateSensorCallback callback); + //获取心率相关数据0表示Alarm,1表示客户端用户发出的,3表示服务端发出的单次获取指令 + oneway void getHeartRateInfo(int from,in String callbackTag); +} \ No newline at end of file diff --git a/app/src/main/aidl/com/ic/work/domain/HeartRate.aidl b/app/src/main/aidl/com/ic/work/domain/HeartRate.aidl new file mode 100644 index 0000000..522b480 --- /dev/null +++ b/app/src/main/aidl/com/ic/work/domain/HeartRate.aidl @@ -0,0 +1,4 @@ +// HeartRate.aidl +package com.ic.work.domain; + +parcelable HeartRate; \ No newline at end of file diff --git a/app/src/main/java/com/ic/blood/BloodActivity.java b/app/src/main/java/com/ic/blood/BloodActivity.java index e4e88c3..6004406 100644 --- a/app/src/main/java/com/ic/blood/BloodActivity.java +++ b/app/src/main/java/com/ic/blood/BloodActivity.java @@ -13,7 +13,6 @@ import android.os.Bundle; import android.view.WindowManager; import com.ic.blood.fragment.BloodFragment; -import com.ic.blood.util.IcLog; public class BloodActivity extends AppCompatActivity { diff --git a/app/src/main/java/com/ic/blood/fragment/BloodFragment.java b/app/src/main/java/com/ic/blood/fragment/BloodFragment.java index c5ed8d5..9a037a4 100644 --- a/app/src/main/java/com/ic/blood/fragment/BloodFragment.java +++ b/app/src/main/java/com/ic/blood/fragment/BloodFragment.java @@ -94,7 +94,6 @@ public class BloodFragment extends Fragment { @Override public void onPause() { super.onPause(); - bloodModel.stopCheckBlood(); gifFromAssets.stop(); releaseWakeLock(); diff --git a/app/src/main/java/com/ic/blood/model/BloodCheckModel.java b/app/src/main/java/com/ic/blood/model/BloodCheckModel.java index 070ef48..ce69b6f 100644 --- a/app/src/main/java/com/ic/blood/model/BloodCheckModel.java +++ b/app/src/main/java/com/ic/blood/model/BloodCheckModel.java @@ -53,14 +53,6 @@ public class BloodCheckModel extends AndroidViewModel { return mObsCheckEnd; } - public void startCheckBlood() { - bloodPresenter.startCheckBlood(); - } - - public void stopCheckBlood() { - bloodPresenter.stopCheckBlood(); - } - public void onCreateView() { bloodPresenter.onCreate(); } diff --git a/app/src/main/java/com/ic/blood/presenter/BloodPresenter.java b/app/src/main/java/com/ic/blood/presenter/BloodPresenter.java index f44177b..6d2f4d0 100644 --- a/app/src/main/java/com/ic/blood/presenter/BloodPresenter.java +++ b/app/src/main/java/com/ic/blood/presenter/BloodPresenter.java @@ -7,27 +7,26 @@ import android.content.Context; 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; @@ -37,15 +36,16 @@ public class BloodPresenter { private MutableLiveData mObsCheckEnd; private MutableLiveData mObsBloodTempValue; - private IBloodRemoteService mService; + private IHeartRateSensorService mService; private SparseArray mTipsSpares; //判断有没有配戴的,如果没有配戴的话,就不更新数据了 private boolean mHasWear = false; + private boolean mBind; public BloodPresenter(Context context) { this.mContext = context; - mTipsSpares = new SparseArray(); + 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)); @@ -133,19 +133,22 @@ public class BloodPresenter { } }; + /** + * 绑定远程服务 + */ 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 { @@ -160,28 +163,23 @@ public class BloodPresenter { } 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}); @@ -200,11 +198,13 @@ public class BloodPresenter { 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); @@ -213,43 +213,58 @@ public class BloodPresenter { @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显示保持安静,准备测试的玩意 } + }; diff --git a/app/src/main/java/com/ic/blood/util/ServiceUtil.java b/app/src/main/java/com/ic/blood/util/ServiceUtil.java index 2acf7a3..f20c9cc 100644 --- a/app/src/main/java/com/ic/blood/util/ServiceUtil.java +++ b/app/src/main/java/com/ic/blood/util/ServiceUtil.java @@ -11,23 +11,23 @@ import java.util.List; public class ServiceUtil { - public static void startServiceUtil(Context context , String serviceAction, String packageName) { + public static void startServiceUtil(Context context, String serviceAction, String packageName) { Intent intent = getExplicitIntent(context, new Intent(serviceAction)); - if(intent != null){ + if (intent != null) { intent.setPackage(packageName); context.startService(intent); } } - public static void bindServiceUtil(Context context , String action, ServiceConnection connection,String pck) { + public static void bindServiceUtil(Context context, String action, ServiceConnection connection, String pck) { Intent in = getExplicitIntent(context, new Intent(action)); - if(in != null){ + if (in != null) { in.setPackage(pck); - context.bindService(in, connection, 0); + context.bindService(in, connection, Context.BIND_AUTO_CREATE); } } - public static void unBindServiceUtil(Context context ,ServiceConnection connection) { + public static void unBindServiceUtil(Context context, ServiceConnection connection) { context.unbindService(connection); } diff --git a/app/src/main/java/com/ic/work/domain/HeartRate.java b/app/src/main/java/com/ic/work/domain/HeartRate.java new file mode 100644 index 0000000..e2fa99e --- /dev/null +++ b/app/src/main/java/com/ic/work/domain/HeartRate.java @@ -0,0 +1,102 @@ +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 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 CREATOR = new Creator() { + @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); + } +}