<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.ic.blood">
+ package="com.ic.blood"
+ android:sharedUserId="android.uid.system">
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.os.Bundle;
import com.ic.blood.fragment.BloodFragment;
+import com.ic.blood.util.IcLog;
public class BloodActivity extends AppCompatActivity {
+ private static final String TAG = "BloodActivity";
+
private FragmentManager fragmentManager;
@Override
setContentView(R.layout.activity_blood);
fragmentManager = getSupportFragmentManager();
commitFragment(BloodFragment.newInstance());
+
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
+ registerReceiver(screenOnOffReceiver, intentFilter);
}
private void commitFragment(Fragment fragment) {
fragmentTransaction.commit();
}
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ unregisterReceiver(screenOnOffReceiver);
+ }
+ private BroadcastReceiver screenOnOffReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
+ finish();
+ }
+ }
+ };
}
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
+import android.os.Handler;
+import android.os.Message;
import android.os.PowerManager;
import android.view.LayoutInflater;
import android.view.View;
import com.ic.blood.util.IcLog;
import java.io.IOException;
+import java.lang.ref.WeakReference;
import pl.droidsonroids.gif.GifDrawable;
import pl.droidsonroids.gif.GifImageView;
private GifDrawable gifFromAssets;
+ private DelayExecuteHandler delayHandler;
+
public static BloodFragment newInstance() {
return new BloodFragment();
}
super.onCreate(savedInstanceState);
mApp = (BloodApp) mContext.getApplicationContext();
initWakeLock(mContext);
+ delayHandler = new DelayExecuteHandler(this);
}
@Override
mWakeLock.acquire();
}
- //bloodModel.startCheckBlood();
-
gifFromAssets.start();
}
private void initBloodModel() {
BloodCheckModel.Factory factory = new BloodCheckModel.Factory(mApp);
- bloodModel= new ViewModelProvider(this, factory).get(BloodCheckModel.class);
+ bloodModel = new ViewModelProvider(this, factory).get(BloodCheckModel.class);
bloodModel.getObsBloodValue().observe(getViewLifecycleOwner(), value -> {
bloodBinding.setIsShowTips(false);
bloodBinding.setHighValue(value[0]);
bloodBinding.setLowValue(value[1]);
bloodBinding.setHeartValue(value[2]);
+ delayHandler.sendMessageDelayed(new Message(),6000);
});
- bloodModel.getObsTipsInfo().observe(getViewLifecycleOwner(),tips ->{
+ bloodModel.getObsTipsInfo().observe(getViewLifecycleOwner(), tips -> {
bloodBinding.setIsShowTips(true);
bloodBinding.setTopTips(tips[0]);
bloodBinding.setBottomTips(tips[1]);
});
- bloodModel.getObsCheckEnd().observe(getViewLifecycleOwner(),end ->{
- switch (end){
- case 1:
- IcLog.i(TAG,"Release WakeLock");
- releaseWakeLock();
- break;
- case 2:
- ((BloodActivity)mContext).finish();
- break;
- }
+ bloodModel.getObsCheckEnd().observe(getViewLifecycleOwner(), end -> {
+ IcLog.i(TAG, "finish");
+ ((BloodActivity) mContext).finish();
});
}
}
private void releaseWakeLock() {
+ IcLog.i(TAG, "Release WakeLock");
if (mWakeLock != null) {
mWakeLock.release();
}
@Override
public void onDestroy() {
super.onDestroy();
- IcLog.i(TAG,"onDestroy");
+ IcLog.i(TAG, "onDestroy");
bloodModel.unregisterScreenReceiver();
bloodModel = null;
if (gifFromAssets != null) {
gifFromAssets.recycle();
}
+
+ delayHandler=null;
+ }
+
+ private static class DelayExecuteHandler extends Handler {
+ private final WeakReference<BloodFragment> mFragment;
+
+ public DelayExecuteHandler(BloodFragment fragment) {
+ mFragment = new WeakReference<BloodFragment>(fragment);
+ }
+
+ @Override
+ public void dispatchMessage(@NonNull Message msg) {
+ super.dispatchMessage(msg);
+ mFragment.get().releaseWakeLock();
+ }
}
}
private SparseArray<String> mTipsSpares;
- private Handler mHandler;
-
public BloodPresenter(Context context) {
this.mContext = context;
mTipsSpares = new SparseArray<String>();
mObsBloodValue = new MutableLiveData<>();
mObsTipsInfo = new MutableLiveData<>();
mObsCheckEnd = new MutableLiveData<>();
-
- mHandler = new Handler();
}
public MutableLiveData<String[]> getObsBloodValue() {
}
public void registerScreenReceiver() {
-
ServiceUtil.bindServiceUtil(mContext, "com.ic.action.WORK_SERVICE", connection, mContext.getPackageName());
-
- IntentFilter intentFilter = new IntentFilter();
- intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
- mContext.registerReceiver(screenOnOffReceiver, intentFilter);
}
public void unregisterScreenReceiver() {
-
- mContext.unregisterReceiver(screenOnOffReceiver);
-
try {
- mService.unregisterCallback(bloodInterface);
+ if(mService != null){
+ mService.unregisterCallback(bloodInterface);
+ }
ServiceUtil.unBindServiceUtil(mContext, connection);
} catch (Exception e) {
- IcLog.e(TAG, e.getMessage());
+ IcLog.e(TAG, "unregisterScreenReceiver",e);
}finally {
mService=null;
bloodInterface=null;
}
connection = null;
- mHandler = null;
}
public void startCheckBlood() {
try {
mService.startCheckBlood();
} catch (Exception e) {
- IcLog.e(TAG, e.getMessage());
+ IcLog.e(TAG, "startCheckBlood",e);
}
}
}
try {
mService.stopCheckBlood();
} catch (Exception e) {
- IcLog.e(TAG, e.getMessage());
+ IcLog.e(TAG, "stopCheckBlood",e);
}
}
}
}
}
- private BroadcastReceiver screenOnOffReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
- IcLog.i(TAG, "灭屏了");
- mObsCheckEnd.setValue(2);
- }
- }
- };
+
private ServiceConnection connection = new ServiceConnection() {
mService.registerCallback(bloodInterface);
startCheckBlood();
} catch (Exception e) {
- IcLog.e(TAG, e.getMessage());
+ IcLog.e(TAG, "ServiceConnection",e);
}
}
@Override
public void updateBloodCheckResult(int high, int low, int heart) throws RemoteException {
updateBoolValue(high, low, heart);
- mHandler.postDelayed(() -> mObsCheckEnd.postValue(1), 10 * 1000);
}
@Override
sb.append("\n\n");
try {
- String fileName = "IcHardware-" + dateFormatDate.format(new Date()) + ".log";
+ String fileName = "IcBlood-" + dateFormatDate.format(new Date()) + ".log";
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
- File dir = new File(Environment.getExternalStorageDirectory().getPath(), "Android/ic/crash/IcHardware");
+ File dir = new File(Environment.getExternalStorageDirectory().getPath(), "Android/ic/crash/IcBlood");
String path = dir.getPath();
if (!dir.exists()) {
dir.mkdirs();
import android.util.Log;
+import com.ic.blood.BuildConfig;
+
/**
* @author RyanLee
* @date 2018/2/2
public class IcLog {
private static final String DOT = ".";
- private static boolean isDebug = true;
+ private static boolean isDebug = BuildConfig.DEBUG;
private static String tagHead = "";
public static void v(String tag, String msg) {
}
}
- public static void e(String tag, String msg) {
+ public static void e(String tag, String msg,Throwable tr) {
if (isDebug) {
- Log.e(mergeHeadTag(tag), msg);
+ Log.e(mergeHeadTag(tag), msg,tr);
}
}
-#Mon Mar 23 19:02:46 CST 2020
-VERSION_CODE=13
+#Tue Mar 24 16:42:06 CST 2020
+VERSION_CODE=14