From: TrillGates Date: Sun, 20 Jun 2021 08:14:18 +0000 (+0800) Subject: get step count auto when watch face in active time. X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=49d3451c49d3ff08663b2ac28530c14dacf9388a;p=icworkservice.git get step count auto when watch face in active time. --- diff --git a/app/src/main/java/com/ic/work/SensorDataService.java b/app/src/main/java/com/ic/work/SensorDataService.java index 32f7b34..ddf4835 100644 --- a/app/src/main/java/com/ic/work/SensorDataService.java +++ b/app/src/main/java/com/ic/work/SensorDataService.java @@ -3,7 +3,11 @@ package com.ic.work; import android.app.Service; import android.content.ContentValues; import android.content.Intent; +import android.database.ContentObserver; +import android.database.Cursor; import android.net.Uri; +import android.os.Handler; +import android.os.HandlerThread; import android.os.IBinder; import android.os.PowerManager; import android.os.RemoteCallbackList; @@ -20,15 +24,19 @@ import com.ic.work.event.TestTaskEvent; import com.ic.work.hardware.BloodInfoHelper; import com.ic.work.hardware.BloodSensorManager; import com.ic.work.hardware.TemperatureHelper; +import com.ic.work.utils.HardwareUtils; import com.ic.work.utils.ICLogger; import com.ic.work.utils.ICWorkConstants; import com.ic.work.utils.IcLog; import com.ic.work.utils.IcSystemProperty; +import com.ic.work.utils.PedUtil; +import com.ic.work.utils.SPUtils; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; +import java.math.BigDecimal; import java.util.concurrent.LinkedBlockingDeque; import static com.ic.work.utils.ICWorkConstants.Jx.ACTION_AEE_HEART_RATE; @@ -66,6 +74,8 @@ public class SensorDataService extends Service implements TemperatureHelper.Temp private final Object mLock = new Object(); private PowerManager powerManager; private PowerManager.WakeLock wakeLock; + private HandlerThread handlerThread; + private Handler handler; @Nullable @Override @@ -95,8 +105,85 @@ public class SensorDataService extends Service implements TemperatureHelper.Temp //那么就取出下一个任务 TemperatureHelper.getInstance().setTemperatureChangeListener(this); BloodInfoHelper.getInstance().setHeartRateInfoChangeListener(this); + //监听表盘活跃状态 + //如果改为了true,那么就每2秒种更新一次步数到数据库里 + //如果为false,则停止任务的执行 + handlerThread = new HandlerThread("ic:sensor:handler"); + handlerThread.start(); + handler = new Handler(handlerThread.getLooper()); + observerWatchFaceActiveState(); + } + + private void observerWatchFaceActiveState() { + ICLogger.d("observerWatchFaceActiveState..."); + getContentResolver().registerContentObserver( + Uri.parse(SETTINGS + ".watch_face_active_state"), + true, + contentObserver + ); } + private final ContentObserver contentObserver = new ContentObserver(null) { + @Override + public void onChange(boolean selfChange) { + handler.post(() -> { + handleWatchFaceActiveTask(); + }); + } + }; + + private void handleWatchFaceActiveTask() { + ICLogger.d("handleWatchFaceActiveTask..."); + //获取到状态 + Cursor cursor = getContentResolver().query(Uri.parse(SETTINGS), + new String[]{"s_value"}, "s_key=?", + new String[]{"watch_face_active_state"}, null); + if (cursor != null) { + try { + if (cursor.moveToNext()) { + String isActive = cursor.getString(0); + boolean isActiveValue = Boolean.parseBoolean(isActive); + //判断是否活跃 + ICLogger.d("isActiveValue == > " + isActiveValue); + if (isActiveValue) { + handler.post(checkPetCountTask); + } else { + handler.removeCallbacks(checkPetCountTask); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + cursor.close(); + } + } + } + + private final Runnable checkPetCountTask = new Runnable() { + @Override + public void run() { + int count = HardwareUtils.getNdkStepCountValue(); + //把count写到数据库里 + ContentValues contentValues = new ContentValues(); + contentValues.put("s_key", "sport_step_count"); + contentValues.put("s_value", count); + getContentResolver().insert( + Uri.parse(SensorDataService.SETTINGS), contentValues + ); + ICLogger.d("count == > " + count); + //更新卡路里 + BigDecimal bg = new BigDecimal(PedUtil.calcConsumeEnergy(SPUtils.getPedHeightSP(getBaseContext()), + SPUtils.getPedWighttSP(getBaseContext()), count)); + String value = String.valueOf(bg.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue()); + //保存一份到数据库中 + ContentValues contentValuesCalorie = new ContentValues(); + contentValuesCalorie.put("s_key", "sport_calorie_value"); + contentValuesCalorie.put("s_value", value); + getContentResolver().insert(Uri.parse(SensorDataService.SETTINGS), contentValues); + //获取步数,然后入库 + handler.postDelayed(this, 2000); + } + }; /** * 此方法已经是子线程了,不可以再开子线程,包括结果的处理。 @@ -173,6 +260,7 @@ public class SensorDataService extends Service implements TemperatureHelper.Temp ); } + /** * 分发温度数据 * @@ -213,6 +301,8 @@ public class SensorDataService extends Service implements TemperatureHelper.Temp public void onDestroy() { super.onDestroy(); mTaskList.clear(); + //不再监听表盘活跃状态的变化 + getContentResolver().unregisterContentObserver(contentObserver); powerManager = null; EventBus.getDefault().unregister(this); TemperatureHelper.getInstance().setTemperatureChangeListener(null); diff --git a/app/src/main/java/com/ic/work/WorkService.java b/app/src/main/java/com/ic/work/WorkService.java index 4d16d5b..4005260 100644 --- a/app/src/main/java/com/ic/work/WorkService.java +++ b/app/src/main/java/com/ic/work/WorkService.java @@ -114,22 +114,16 @@ public class WorkService extends Service { public void onCreate() { super.onCreate(); mApp = (WorkServiceApp) getApplication(); - weatherProcess = new WeatherProcess(); bloodProcess = new BloodProcess(); pedProcess = new PedProcess(); tempProcess = new TempProcess(); akProcess = new AkProcess(); - mWeatherHelper = new WeatherHelper(mApp.getWeatherRepository(), this); - EventBus.getDefault().register(this); - registerBroadcast(); - coreService = new MessengerCoreService(); coreService.bindCoreService(getApplicationContext()); - IcLog.i(TAG, "work service is start"); }