import android.content.ComponentName
import android.content.Context
+import android.content.Intent
import android.content.ServiceConnection
import android.os.IBinder
import android.os.RemoteException
-import com.ic.aidl.temp.ITempAidlInterface
-import com.ic.aidl.temp.ITempRemoteService
import com.ic.temperature.utils.Constants
import com.ic.temperature.utils.IcLog
-import com.ic.temperature.utils.ServiceUtil
-import com.ic.temperature.viewmodel.TemperatureViewModel
+import com.ic.work.ITempSensorCallback
+import com.ic.work.ITempSensorService
+import com.ic.work.domain.Temperature
class TemperatureRepository(context: Context) {
+ companion object {
+ const val TAG = "TemperatureRepository"
+ }
+
private var mContext: Context = context
- private var mService: ITempRemoteService? = null
+ private var mService: ITempSensorService? = null
private var mCallback: ITemRepositoryCallback? = null
fun release() {
- ServiceUtil.unBindServiceUtil(mContext, mRemoteConnection)
+ try {
+ if (mService != null) {
+ mService?.unRegisterCallback(remoteDataCallback)
+ mContext.unbindService(mRemoteConnection)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
}
/**
return
}
this.mCallback = callback
- IcLog.i(TemperatureViewModel.TAG, "bind remote service..")
- ServiceUtil.bindServiceUtil(
- context,
- Constants.ACTION_REMOTE_WORK_SERVICE,
+ IcLog.i(TAG, "bind remote service..")
+ context.bindService(
+ Intent(Constants.ACTION_TEMPERATURE),
mRemoteConnection,
- Constants.PACKAGE_REMOTE_WORK_SERVICE
+ Context.BIND_AUTO_CREATE
)
}
Callback4Remote()
}
-
private val mRemoteConnection by lazy {
RemoteServiceConnection()
}
- inner class Callback4Remote : ITempAidlInterface.Stub() {
+ inner class Callback4Remote : ITempSensorCallback.Stub() {
@Throws(RemoteException::class)
/**
* bodyOrWristTemp:体温或者腕温(当不支持腕温的时候,就是体温)
* maybeBodyTemp:可能是体温(如果支持腕温的时候)
* envTemp:环境温度
*/
- override fun updateCurrTempValue(
- bodyOrWristTemp: Double,
- maybeBodyTemp: Double,
- envTemp: Double
- ) {
+ override fun onTemperatureGet(temperature: Temperature?) {
+ if (temperature == null) {
+ IcLog.d(TAG, "result is null")
+ return
+ }
+ IcLog.d(TAG, "temperature is == > $temperature")
IcLog.d(
- TemperatureViewModel.TAG,
- "updateCurrTempValue... "
- + bodyOrWristTemp +
- " maybeBodyTemp --> "
- + maybeBodyTemp +
+ TAG,
+ "final ... "
+ + temperature.wristTemp +
+ " maybeBodyTemp --> "
+ + temperature.bodyTemp +
" envTemp + > "
- + envTemp
+ + temperature.envTemp
)
- mCallback?.onTempUpdate(bodyOrWristTemp, maybeBodyTemp, envTemp)
+ //最后的结果
+ mCallback?.onTempFinal(temperature.wristTemp, temperature.bodyTemp, temperature.envTemp)
}
- /**
- * bodyOrWristTemp:体温或者腕温(当不支持腕温的时候,就是体温)
- * maybeBodyTemp:可能是体温(如果支持腕温的时候)
- * envTemp:环境温度
- */
- @Throws(RemoteException::class)
- override fun updateResultTempValue(
- bodyOrWristTemp: Double,
- maybeBodyTemp: Double,
- envTemp: Double
- ) {
- IcLog.d(
- TemperatureViewModel.TAG,
- "final ... "
- + bodyOrWristTemp +
- " maybeBodyTemp --> "
- + maybeBodyTemp +
- " envTemp + > "
- + envTemp
+ override fun onTemperatureUpdating(temperature: Temperature) {
+ //温度更新中...
+ mCallback?.onTempUpdate(
+ temperature.wristTemp,
+ temperature.bodyTemp,
+ temperature.envTemp
)
- //最后的结果
- mCallback?.onTempFinal(bodyOrWristTemp, maybeBodyTemp, envTemp)
+ }
+
+ override fun onGetingData() {
+ //正在获取
+ }
+
+ override fun onWaiting() {
+ //
}
}
*/
inner class RemoteServiceConnection : ServiceConnection {
override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
- mService = ITempRemoteService.Stub.asInterface(service)
+ IcLog.d(TAG, "on service bind...")
+ mService = ITempSensorService.Stub.asInterface(service)
//把回调接口设置给对方
- mService?.registerCallback(remoteDataCallback)
- getTemperature()
+ IcLog.d(TAG, "register callback..")
+ mService?.registerCallback(
+ remoteDataCallback,
+ this@TemperatureRepository.javaClass.name
+ )
+ Thread {
+ getTemperature()
+ }.start();
}
override fun onServiceDisconnected(name: ComponentName?) {
fun getTemperature() {
mCallback?.onTesting()
try {
- //调用开始查询温度
- mService?.onStartQueryTemp()
+ //调用开始查询温度,2表示用户主动测试,1
+ //SERVER_CMD(0)/*服务端单次测量指令*/,
+ //ALARM_CMD(1)/*定时的测试指令*/,
+ //CLIENT_CMD(2)/*用户UI主动的指令*/;
+ IcLog.d(TAG, "get Temperature -- > " + Thread.currentThread().name)
+ mService?.getTemperatureInfo(2, this@TemperatureRepository.javaClass.name)
} catch (e: Exception) {
e.printStackTrace()
}
--- /dev/null
+package com.ic.work.domain;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * bean类:体温,腕温,环境温度
+ */
+public class Temperature implements Parcelable {
+ private double bodyTemp;
+ private double wristTemp;
+ private double envTemp;
+
+
+ public Temperature(double bodyTemp, double wristTemp, double envTemp) {
+ this.bodyTemp = bodyTemp;
+ this.wristTemp = wristTemp;
+ this.envTemp = envTemp;
+ }
+
+ protected Temperature(Parcel in) {
+ bodyTemp = in.readDouble();
+ wristTemp = in.readDouble();
+ envTemp = in.readDouble();
+ }
+
+ public static final Creator<Temperature> CREATOR = new Creator<Temperature>() {
+ @Override
+ public Temperature createFromParcel(Parcel in) {
+ return new Temperature(in);
+ }
+
+ @Override
+ public Temperature[] newArray(int size) {
+ return new Temperature[size];
+ }
+ };
+
+ public double getBodyTemp() {
+ return bodyTemp;
+ }
+
+ public void setBodyTemp(double bodyTemp) {
+ this.bodyTemp = bodyTemp;
+ }
+
+ public double getWristTemp() {
+ return wristTemp;
+ }
+
+ public void setWristTemp(double wristTemp) {
+ this.wristTemp = wristTemp;
+ }
+
+ public double getEnvTemp() {
+ return envTemp;
+ }
+
+ public void setEnvTemp(double envTemp) {
+ this.envTemp = envTemp;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeDouble(bodyTemp);
+ dest.writeDouble(wristTemp);
+ dest.writeDouble(envTemp);
+ }
+
+ @Override
+ public String toString() {
+ return "Temperature{" +
+ "bodyTemp=" + bodyTemp +
+ ", wristTemp=" + wristTemp +
+ ", envTemp=" + envTemp +
+ '}';
+ }
+}