Browse Source

修改护理项颜色异常问题,修改3128使用webview出现崩溃问题等

weizhengliang 1 năm trước cách đây
mục cha
commit
c254590e91

+ 3 - 1
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/activity/CallingbedActivationActivity.kt

@@ -227,6 +227,7 @@ class CallingbedActivationActivity  : BaseActivity<CallingbedActivationPresenter
                         .build()
 
                 try {
+                    Log.i(TAG, "start check server: ${request.url()}")
                     val response = okHttpClient.newCall(request).execute()
                     if (response != null && response.isSuccessful) {
                         //接口数据获取成功,进入下一步获取设备信息
@@ -242,9 +243,10 @@ class CallingbedActivationActivity  : BaseActivity<CallingbedActivationPresenter
                     }
                 } catch (e: Exception) {
                     //接口数据获取失败,可能服务器ip不对,尝试重新获取服务器ip
+                    Log.e(TAG, "check server exception:")
+                    e.printStackTrace()
                     val info = ServerInfoUtil.get(Constant.DEVICE_REGISTER_ID!!)
                     checkServerInfo(info)
-                    //e.printStackTrace()
                 }
 
                 try {

+ 10 - 6
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/adapter/NurseConfigAdpter.kt

@@ -13,6 +13,7 @@ import androidx.core.content.ContextCompat
 import androidx.recyclerview.widget.RecyclerView
 import com.wdkl.app.ncs.callingbed.R
 import com.wdkl.ncs.android.middleware.model.dto.NurseConfigDto
+import com.wdkl.ncs.android.middleware.utils.StringUtil
 import java.lang.Exception
 
 class NurseConfigAdpter : RecyclerView.Adapter<NurseConfigAdpter.ViewHolder> {
@@ -25,7 +26,7 @@ class NurseConfigAdpter : RecyclerView.Adapter<NurseConfigAdpter.ViewHolder> {
     }
 
     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
-        val view = LayoutInflater.from(parent?.context).inflate(R.layout.item_nurse_config, parent, false)
+        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_nurse_config, parent, false)
         val viewHolder = ViewHolder(view)
 
         return viewHolder
@@ -35,12 +36,15 @@ class NurseConfigAdpter : RecyclerView.Adapter<NurseConfigAdpter.ViewHolder> {
         try {
             val drawableId: Int = context.resources.getIdentifier("shape_nurse_bg", "drawable", context.packageName)
             val drawable: Drawable? = ContextCompat.getDrawable(context, drawableId)
-            val rgbValue = com.libra.Color.parseColor("#" + data.get(position).nurseColorRbg)
-            drawable?.setTint(rgbValue)
+            val nurseColor: String? = data[position].nurseColorRbg
+            if (StringUtil.notEmpty(nurseColor)) {
+                val rgbValue = Color.parseColor("#" + data[position].nurseColorRbg)
+                drawable?.setTint(rgbValue)
+            } else {
+                drawable?.setTint(Color.parseColor("#e8e8e8"))
+            }
             holder.bed_f_txt.background = drawable
-//            holder.bed_f_txt.setBackgroundColor(Color.parseColor("#"+data.get(position).nurseColorRbg))
-            holder.bed_f_txt.setText(data.get(position).nurseOptionName)
-//            holder.nurseValue.setText(data.get(position).nurseOptionName)
+            holder.bed_f_txt.text = data[position].nurseOptionName
         } catch (e: Exception) {
             e.printStackTrace()
         }

+ 7 - 4
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/broadcast/WdBootReceiver.java

@@ -3,6 +3,7 @@ package com.wdkl.app.ncs.callingbed.broadcast;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
+import android.os.Build;
 import android.util.Log;
 
 import com.wdkl.ncs.android.component.welcome.activity.WelcomeActivity;
@@ -12,10 +13,12 @@ public class WdBootReceiver extends BroadcastReceiver {
     @Override
     public void onReceive(Context context, Intent intent) {
         if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
-            Log.d("wdBoot", "收到开机广播,启动app");
-            Intent startIntent= new Intent(context, WelcomeActivity.class);
-            startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-            context.startActivity(startIntent);
+            if (!Build.MODEL.equals("rk3128")) {
+                Log.d("wdBoot", "收到开机广播,启动app");
+                Intent startIntent = new Intent(context, WelcomeActivity.class);
+                startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                context.startActivity(startIntent);
+            }
         }
     }
 }

+ 6 - 5
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/fragment/NursingWorkFragment.kt

@@ -24,6 +24,7 @@ import com.wdkl.ncs.android.middleware.common.MessageEvent
 import com.wdkl.ncs.android.middleware.logic.contract.callingbed.BedNursingWorkFragmentContract
 import com.wdkl.ncs.android.middleware.logic.presenter.callingbed.BedNursingWorkFragmentPresenter
 import com.wdkl.ncs.android.middleware.model.vo.DeviceMenulist
+import com.wdkl.ncs.android.middleware.utils.StringUtil
 import kotlinx.android.synthetic.main.nursing_work_lay.*
 import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.Subscribe
@@ -53,12 +54,12 @@ NursingWorkFragment : BaseFragment<BedNursingWorkFragmentPresenter, NursingWorkL
     }
     //数据绑定
     override fun init() {
-        recycler.setVisibility(View.VISIBLE)
         val layoutManager = GridLayoutManager(getActivity(), 3)
-        recycler.setLayoutManager(layoutManager)
-        var part_id =Constant.DEVICE_REGISTER_ID
-        if (part_id!=null){
-            presenter.DeviceMenulist(part_id)
+        recycler.visibility = View.VISIBLE
+        recycler.layoutManager = layoutManager
+
+        if (StringUtil.notEmpty(Constant.DEVICE_REGISTER_ID)){
+            presenter.DeviceMenulist(Constant.DEVICE_REGISTER_ID)
         }
     }
     //点击事件

+ 44 - 32
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/fragment/SignMainFragment.kt

@@ -12,6 +12,7 @@ import androidx.annotation.RequiresApi
 import com.enation.javashop.net.engine.model.NetState
 import com.enation.javashop.utils.base.widget.LoadingDialog
 import com.wdkl.app.ncs.callingbed.R
+import com.wdkl.app.ncs.callingbed.activity.SignActivity
 import com.wdkl.app.ncs.callingbed.databinding.SignFragmentLayBinding
 import com.wdkl.app.ncs.callingbed.helper.CommonDialogHelper
 import com.wdkl.app.ncs.callingbed.launch.CallingbedLaunch
@@ -28,48 +29,57 @@ import kotlinx.android.synthetic.main.sign_fragment_lay.*
 class SignMainFragment : BaseFragment<BedSignFragmentPresenter, SignFragmentLayBinding>(), BedSignFragmentContract.View {
 
     private lateinit var loadingDialog:LoadingDialog
+    private lateinit var webView: WebView
+
+    fun signLoadUrl(memberId: Int, gateWay: String) {
+        webView.loadUrl("file:///android_asset/web/vital_sign_log.html?id=" + memberId + "&gw=" + gateWay)
+    }
+
     @SuppressLint("JavascriptInterface")
-    companion object {
-        var webView: WebView = WebView(BaseApplication.appContext)
-        fun signLoadUrl(memberId:Int, gateWay:String){
-            webView.loadUrl("file:///android_asset/web/vital_sign_log.html?id=" + memberId + "&gw=" + gateWay)
+    fun initWebViewSettings() {
+        // 解决共用system uid时报
+        // Caused by: java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in privileged processes 错误
+        val uid = android.os.Process.myUid()
+        if (uid == android.os.Process.ROOT_UID || uid == android.os.Process.SYSTEM_UID) {
+            (activity as SignActivity).hookWebView()
         }
-        init {
-            webView.addJavascriptInterface(BaseApplication.appContext,"webview")
-            var webSettings = webView.settings
-            webSettings.javaScriptEnabled = true  // 开启 JavaScript 交互
-
-            webSettings.allowUniversalAccessFromFileURLs = true //跨域
-            webSettings.setAppCacheEnabled(true) // 启用或禁用缓存
-            webSettings.cacheMode = WebSettings.LOAD_DEFAULT // 只要缓存可用就加载缓存, 哪怕已经过期失效 如果缓存不可用就从网络上加载数据
+
+        webView = WebView(BaseApplication.appContext)
+        webView.addJavascriptInterface(BaseApplication.appContext, "webview")
+        var webSettings = webView.settings
+        webSettings.javaScriptEnabled = true  // 开启 JavaScript 交互
+
+        webSettings.allowUniversalAccessFromFileURLs = true //跨域
+        webSettings.setAppCacheEnabled(true) // 启用或禁用缓存
+        webSettings.cacheMode = WebSettings.LOAD_DEFAULT // 只要缓存可用就加载缓存, 哪怕已经过期失效 如果缓存不可用就从网络上加载数据
 //        webSettings.setAppCachePath(cacheDir.path) // 设置应用缓存路径
 
-            // 缩放操作
-            webSettings.setSupportZoom(true) // 支持缩放 默认为true 是下面那个的前提
-            webSettings.builtInZoomControls = false // 设置内置的缩放控件 若为false 则该WebView不可缩放
-            webSettings.displayZoomControls = false // 隐藏原生的缩放控件
+        // 缩放操作
+        webSettings.setSupportZoom(true) // 支持缩放 默认为true 是下面那个的前提
+        webSettings.builtInZoomControls = false // 设置内置的缩放控件 若为false 则该WebView不可缩放
+        webSettings.displayZoomControls = false // 隐藏原生的缩放控件
 
-            webSettings.blockNetworkImage = false // 禁止或允许WebView从网络上加载图片
-            webSettings.loadsImagesAutomatically = true // 支持自动加载图片
+        webSettings.blockNetworkImage = false // 禁止或允许WebView从网络上加载图片
+        webSettings.loadsImagesAutomatically = true // 支持自动加载图片
 
-            webSettings.javaScriptCanOpenWindowsAutomatically = true // 支持通过JS打开新窗口
-            webSettings.domStorageEnabled = true // 启用或禁用DOM缓存
-            webSettings.setSupportMultipleWindows(false) // 设置WebView是否支持多窗口
+        webSettings.javaScriptCanOpenWindowsAutomatically = true // 支持通过JS打开新窗口
+        webSettings.domStorageEnabled = true // 启用或禁用DOM缓存
+        webSettings.setSupportMultipleWindows(false) // 设置WebView是否支持多窗口
 
-            // 设置自适应屏幕, 两者合用
-            webSettings.useWideViewPort = true  // 将图片调整到适合webview的大小
-            webSettings.loadWithOverviewMode = true  // 缩放至屏幕的大小
-            webSettings.allowFileAccess = true // 设置可以访问文件
+        // 设置自适应屏幕, 两者合用
+        webSettings.useWideViewPort = true  // 将图片调整到适合webview的大小
+        webSettings.loadWithOverviewMode = true  // 缩放至屏幕的大小
+        webSettings.allowFileAccess = true // 设置可以访问文件
 
-            webSettings.setGeolocationEnabled(true) // 是否使用地理位置
+        webSettings.setGeolocationEnabled(true) // 是否使用地理位置
 
-            webSettings.layoutAlgorithm = WebSettings.LayoutAlgorithm.SINGLE_COLUMN
-            webSettings.textZoom = 150
+        webSettings.layoutAlgorithm = WebSettings.LayoutAlgorithm.SINGLE_COLUMN
+        webSettings.textZoom = 150
 
-            webView.fitsSystemWindows = true
-        }
+        webView.fitsSystemWindows = true
     }
 
+
     override fun getLayId(): Int {
         return R.layout.sign_fragment_lay
     }
@@ -78,11 +88,13 @@ class SignMainFragment : BaseFragment<BedSignFragmentPresenter, SignFragmentLayB
         CallingbedLaunch.component.inject(this)
     }
 
-    @RequiresApi(Build.VERSION_CODES.O)
     override fun init() {
         //loadingDialog = CommonTool.createLoadingDialog(getActivity(), R.layout.data_loading, R.id.loadding_image)
-        loadingDialog = CommonDialogHelper.createLoadingDialog(activity, R.layout.data_loading, R.id.loadding_image, false)
+        loadingDialog = CommonDialogHelper.createLoadingDialog(activity, R.layout.data_loading, R.id.loadding_image, true)
         loadingDialog.show()
+
+        initWebViewSettings()
+
         webView.webViewClient = object : WebViewClient() {
             override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
                 return false

+ 1 - 1
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/helper/XCrashUtils.java

@@ -234,7 +234,7 @@ public class XCrashUtils {
     private void restartApp() {
         //重新启动app
         Intent mStartActivity = new Intent(app.getApplicationContext(), WelcomeActivity.class);
-        mStartActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+        mStartActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
         int mPendingIntentId = 123456;
         PendingIntent mPendingIntent = PendingIntent.getActivity(app.getApplicationContext(), mPendingIntentId, mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);
         AlarmManager mgr = (AlarmManager) app.getApplicationContext().getSystemService(Context.ALARM_SERVICE);

+ 2 - 3
android_bed/src/main/res/drawable/shape_nurse_bg.xml

@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <solid android:color="@color/white"/>
+    <solid android:color="#e8e8e8"/>
     <corners
-        android:radius="10dp"
-      />
+        android:radius="10dp" />
 
 </shape>

+ 4 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/utils/StringUtil.java

@@ -7,4 +7,8 @@ public class StringUtil {
     public static String getResString(int resId) {
         return BaseApplication.appContext.getString(resId);
     }
+
+    public static boolean notEmpty(String str) {
+        return str != null && str.length() > 0 && !str.equalsIgnoreCase("null");
+    }
 }

+ 2 - 1
welcome/src/main/AndroidManifest.xml

@@ -7,7 +7,8 @@
         android:supportsRtl="true">
 
         <activity android:name="com.wdkl.ncs.android.component.welcome.activity.WelcomeActivity"
-            android:screenOrientation="nosensor">
+            android:screenOrientation="nosensor"
+            android:launchMode="singleTask">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN"/>