Procházet zdrojové kódy

经测试发现,使用powerManager进入休眠后设备会频繁出现掉网问题,切换另一种方案:
通过设置背光亮度为0来熄屏,但此时系统还在正常工作,触摸也正常,为了防止误触需要增加一个黑色背景盖住

weizhengliang před 1 rokem
rodič
revize
e04db1f386

+ 72 - 22
android_bed/src/main/h7_3128/java/com/wdkl/app/ncs/callingbed/activity/CallingbedActivity.kt

@@ -221,11 +221,12 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, Callingbed2M
         Utils.setStatusBarDisable(activity, Utils.STATUS_BAR_DISABLE_EXPAND)
 
         //保持屏幕常亮
-        //AppTool.Setting.setScreenOffTimeOut2(applicationContext, 2147483647)
+        AppTool.Setting.setScreenOffTimeOut2(applicationContext, 2147483647)
 
         //亮屏
-        AppUtil.wakeUp(activity)
-        setScreenOffTime(Constant.day_state)
+        //AppUtil.wakeUp(activity)
+        //setScreenOffTime(Constant.day_state)
+        screenOn()
 
         checkServer()
 
@@ -336,10 +337,12 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, Callingbed2M
 
                         if (Constant.CUSTOM_ID == -1) {
                             //床位未入住,设备休眠
-                            AppUtil.goToSleep(activity)
+                            //AppUtil.goToSleep(activity)
+                            screenOff()
                         } else if (Constant.NIGHT_BRIGHTNESS == 0 && Constant.day_state == 1 && !Constant.IS_RECORDING && skyCallFragment == null) {
                             //当前为夜晚熄屏模式,设备休眠
-                            AppUtil.goToSleep(activity)
+                            //AppUtil.goToSleep(activity)
+                            screenOff()
                         }
                     }
                 } catch (e: Exception) {
@@ -492,11 +495,11 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, Callingbed2M
     }
 
     override fun bindEvent() {
-        /*black_view.setOnClickListener {
-            resetSleepTime()
-            black_view.visibility = View.GONE
+        black_view.setOnClickListener {
+            //resetSleepTime()
+            //black_view.visibility = View.GONE
             return@setOnClickListener
-        }*/
+        }
 
         tv_btn_home.setOnClickListener {
             //重置黑屏时间
@@ -694,7 +697,8 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, Callingbed2M
         //cancelSleep()
 
         //亮屏
-        AppUtil.wakeUp(activity)
+        //AppUtil.wakeUp(activity)
+        screenOn()
     }
 
     //数据加载错误
@@ -969,7 +973,7 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, Callingbed2M
                     initDevice()
 
                     //容错处理,设置熄屏时间
-                    setScreenOffTime(Constant.day_state)
+                    //setScreenOffTime(Constant.day_state)
                 } catch (e: Exception) {
                     //
                 }
@@ -1018,13 +1022,17 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, Callingbed2M
                 || buffer[5].toInt() == 1 || buffer[5].toInt() == 2
                 || buffer[6].toInt() == 1 || buffer[6].toInt() == 2) {
 
-                AppUtil.wakeUp(activity)
+                //AppUtil.wakeUp(activity)
+                screenOn()
+
                 /*runOnUiThread {
                     cancelSleep()
                     black_view.visibility = View.GONE
                 }*/
             } else if (buffer[8].toInt() == 1 || buffer[8].toInt() == 2) {
-                AppUtil.wakeUp(activity)
+                //AppUtil.wakeUp(activity)
+                screenOn()
+
                 /*runOnUiThread {
                     cancelSleep()
                     black_view.visibility = View.GONE
@@ -1196,7 +1204,7 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, Callingbed2M
                 }, 2000)
 
                 //退出通话,重新设置熄屏时间
-                setScreenOffTime(Constant.day_state)
+                //setScreenOffTime(Constant.day_state)
             }
 
             //Sip注册状态
@@ -1231,7 +1239,8 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, Callingbed2M
                                 }*/
 
                                 //亮屏
-                                AppUtil.wakeUp(activity)
+                                //AppUtil.wakeUp(activity)
+                                screenOn()
 
                                 val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
                                 Constant.fromId = tcpModel.fromId
@@ -1294,7 +1303,8 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, Callingbed2M
                         }
                     } else if (tcpModel.type == TcpType.BROADCAST) {
                         //亮屏
-                        AppUtil.wakeUp(activity)
+                        //AppUtil.wakeUp(activity)
+                        screenOn()
 
                         if (tcpModel.action == TcpAction.BroadcastAction.START) {
                             if (Constant.TCP_CONNECTED && !TextUtils.isEmpty(Constant.SIP_ID)) {
@@ -1317,7 +1327,8 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, Callingbed2M
                         //检查APP版本
                         if (tcpModel.getAction() == TcpAction.DeviceAction.APP_UPDATE) {
                             //亮屏
-                            AppUtil.wakeUp(activity)
+                            //AppUtil.wakeUp(activity)
+                            screenOn()
 
                             checkAppVersion()
                         } else if (tcpModel.action == TcpAction.DeviceAction.RESTART) {
@@ -1381,7 +1392,8 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, Callingbed2M
                     //探视
                     if (tcpModel.type == TcpType.VIDEO) {
                         //亮屏
-                        AppUtil.wakeUp(activity)
+                        //AppUtil.wakeUp(activity)
+                        screenOn()
 
                         val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
                         if (tcpModel.action == TcpAction.VideoAction.VIDEO_INVITE_JOIN) {
@@ -1568,6 +1580,9 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, Callingbed2M
 
     //网卡断电再上电,并重启设备
     private fun netOffReset() {
+        //记录设备掉网重启日志
+        errorLog("NetError", "net off reset start")
+
         Thread {
             try {
                 SerialPortHelper.netOff(true)
@@ -1650,7 +1665,7 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, Callingbed2M
                 view_title_layout_iv_day_night.setImageResource(R.mipmap.ic_daylight)
 
                 //白天模式
-                setScreenOffTime(0)
+                //setScreenOffTime(0)
 
                 //灭掉紧急按钮灯
                 AppTool.Time.delay(2000) {
@@ -1669,7 +1684,7 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, Callingbed2M
                 view_title_layout_iv_day_night.setImageResource(R.mipmap.ic_night)
 
                 //夜晚模式
-                setScreenOffTime(1)
+                //setScreenOffTime(1)
 
                 //打开紧急按钮灯
                 AppTool.Time.delay(2000) {
@@ -1692,9 +1707,23 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, Callingbed2M
         }*/
 
 
-        if (Constant.day_state == 0 && Constant.CUSTOM_ID != -1) {
+        /*if (Constant.day_state == 0 && Constant.CUSTOM_ID != -1) {
             //当前是白天且床位有入住才亮屏
             AppUtil.wakeUp(activity)
+        }*/
+
+        if (Constant.day_state == 1 && Constant.NIGHT_BRIGHTNESS == 0) {
+            if (!Constant.IS_RECORDING && skyCallFragment == null) {
+                //夜晚熄屏
+                screenOff()
+            }
+        } else {
+            //白天有人入住亮屏,无人入住则熄屏
+            if (Constant.CUSTOM_ID != -1) {
+                screenOn()
+            } else {
+                screenOff()
+            }
         }
     }
 
@@ -1716,7 +1745,28 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, Callingbed2M
     }
 
     override fun keepScreenOn(): Boolean {
-        return false
+        return true
+    }
+
+    //熄屏模式如果仅仅将背光关闭的话触摸还可用,会导致误触,需要添加一个黑色背景盖住来防止误触
+    fun screenOn() {
+        AppUtil.turnOnScreen()
+
+        runOnUiThread {
+            if (black_view.visibility == View.VISIBLE) {
+                black_view.visibility = View.GONE
+            }
+        }
+    }
+
+    fun screenOff() {
+        runOnUiThread {
+            if (black_view.visibility == View.GONE) {
+                black_view.visibility = View.VISIBLE
+            }
+        }
+
+        AppUtil.turnOffScreen()
     }
 
     /**

+ 3 - 1
android_bed/src/main/h7_3128/java/com/wdkl/app/ncs/callingbed/fragment/QrCodeFragment.kt

@@ -129,7 +129,9 @@ class QrCodeFragment : BaseFragment<QrCodeFragmentPresenter, QrCodeLayBinding>()
     override fun bindEvent() {
         tv_btn_screen_off.setOnClickListener {
             //(activity as CallingbedActivity).turnScreenOff()
-            AppUtil.goToSleep(activity)
+            //AppUtil.goToSleep(activity)
+
+            (activity as CallingbedActivity).screenOff()
         }
 
         tv_btn_update_app.setOnClickListener {

+ 49 - 0
android_bed/src/main/h7_3128/java/com/wdkl/app/ncs/callingbed/helper/AppUtil.java

@@ -4,18 +4,25 @@ import android.app.AlarmManager;
 import android.content.Context;
 import android.os.PowerManager;
 import android.os.SystemClock;
+import android.provider.Settings;
 import android.text.TextUtils;
 import android.util.Log;
+import android.view.View;
+import android.view.WindowManager;
 
+import com.wdkl.ncs.android.lib.base.BaseApplication;
 import com.wdkl.ncs.android.middleware.common.Constant;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
+import java.io.PrintStream;
 import java.lang.reflect.InvocationTargetException;
 import java.util.Calendar;
 
 public class AppUtil {
 
+    private static final String BRIGHTNESS_PATH = "/sys/class/backlight/rk28_bl/brightness";
+
     /**
      * 设置系统时间
      *
@@ -150,4 +157,46 @@ public class AppUtil {
         }
     }
 
+
+    public static void turnOffScreen() {
+        Log.e("screen", "trying turn off screen");
+        setBrightness(0);
+    }
+
+    public static void turnOnScreen() {
+        boolean success = false;
+        try {
+            Log.e("screen", "trying turn on screen");
+            int brightness = Settings.System.getInt(BaseApplication.appContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
+            if (brightness > 0) {
+                setBrightness(brightness);
+            } else {
+                setBrightness(200);
+            }
+            success = true;
+        } catch (Settings.SettingNotFoundException e) {
+            e.printStackTrace();
+        }
+
+        if (!success) {
+            setBrightness(200);
+        }
+    }
+
+    //设置背光
+    private static boolean setBrightness(int value) {
+        PrintStream stream;
+        try {
+            stream = new PrintStream(BRIGHTNESS_PATH);
+            stream.print(value);
+            stream.close();
+            Log.d("screen","Write brightness success! " + value);
+            return true;
+        } catch (Exception e) {
+            Log.d("screen","Write brightness failed! " + value);
+            e.printStackTrace();
+        }
+
+        return false;
+    }
 }

+ 2 - 2
android_bed/src/main/h7_3128/res/layout/callingbed2_main_lay.xml

@@ -221,13 +221,13 @@
             android:layout_height="match_parent" />
 
         <!--black screen-->
-        <!--<LinearLayout
+        <LinearLayout
             android:id="@+id/black_view"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:orientation="horizontal"
             android:background="#000000"
-            android:visibility="gone"/>-->
+            android:visibility="gone"/>
 
     </RelativeLayout>
 </layout>

+ 1 - 5
common/src/main/code/com/wdkl/ncs/android/lib/base/BaseActivity.kt

@@ -10,13 +10,9 @@ import android.view.Window
 import android.view.WindowManager
 import android.view.inputmethod.InputMethodManager
 import com.enation.javashop.android.jrouter.JRouter
-import com.wdkl.ncs.android.lib.R
+import com.enation.javashop.utils.base.tool.BaseToolActivity
 import com.wdkl.ncs.android.lib.utils.debugLog
 import com.wdkl.ncs.android.lib.utils.errorLog
-import com.enation.javashop.utils.base.tool.BaseToolActivity
-import com.enation.javashop.utils.base.tool.CommonTool
-import com.enation.javashop.utils.base.widget.LoadingDialog
-import kotlinx.android.synthetic.main.custom_loading.view.*
 import java.lang.reflect.Field
 import javax.inject.Inject