中建365-绑定设备

develop
wlh 1 year ago
parent 485b67d188
commit 0913f3115c

@ -70,6 +70,7 @@ android {
buildTypes {
release {
buildConfigField("String", "url", "\"${url.release_url}\"")
buildConfigField("String","h5url","\"${url.h5_release_url}\"")
buildConfigField("String", "image_prefix","\"${imagePrefix.release_url}\"")
buildConfigField("Boolean","isRelease",String.valueOf(true))
minifyEnabled false
@ -78,6 +79,7 @@ android {
}
debug {
buildConfigField("String", "url", "\"${url.debug_url}\"")
buildConfigField("String","h5url","\"${url.h5_debug_url}\"")
buildConfigField("Boolean","isRelease",String.valueOf(false))
buildConfigField("String", "image_prefix","\"${imagePrefix.debug_url}\"")
signingConfig signingConfigs.release

@ -325,7 +325,12 @@
android:name="com.xty.common.xqr_code.XQRCodeAct"
android:launchMode="singleTop"
android:screenOrientation="portrait"/>
<activity android:name="com.xty.base.act.WebAct"
android:launchMode="singleTop"
android:screenOrientation="portrait"/>
<activity android:name="com.xty.base.act.BaseTenCentWebViewActivity"
android:screenOrientation="portrait"/>
<service
android:name="com.xty.common.services.MusicService"
android:exported="true"

@ -40,12 +40,6 @@ class CalorieAnalyzeAct : BaseVmAct<BaseVm>() {
finish()
}
binding.tvContent.text = "1.注意事项、操作指南文案。平台能通过照片分析出大部分食物、水果蔬菜、菜品。上传更清晰完整的照片,分析结果更准确。" +
"\n2.平台能通过照片分析出大部分食物、水果蔬菜、菜品。\n" +
"3.上传更清晰完整的招聘,分析结果更准确。平台能通过照片分析出大部分食物。\n" +
"4.上传更清晰完整的照片,分析结果更准确。平台能通过照片分析出大部分食物、水果蔬菜、菜品。\n" +
"5.上传更清晰完整的招聘,分析结果更准确。平台能通过照片分析出大部分食物、水果蔬菜、菜品。上传更清晰完整的招聘,分析结果更准确。\n"
binding.tvDishes.setOnClickListener {
bottomSheetDialog?.show()
type = "1"

@ -6,6 +6,8 @@ import com.xty.base.act.BaseVmAct
import com.xty.base.vm.BaseVm
import com.xty.common.arouter.ARouterUrl
import com.xty.common.arouter.RouteManager
import com.xty.common.util.CommonToastUtils
import com.zj365.dc.BuildConfig
import com.zj365.dc.R
import com.zj365.dc.databinding.ActDietManagementBinding
@ -40,17 +42,27 @@ class DietManagementAct : BaseVmAct<BaseVm>(){
}
R.id.rx_healthy_diet ->{
bundle.clear()
bundle.putString("web_site_url","http://testbuilt.zhongjian365.com/ ")
// bundle.putString("web_site_url","${BuildConfig.h5url}pages/index/index?pageId=cookbook")
RouteManager.goAct(ARouterUrl.H5_ACT,bundle)
// var url = "${BuildConfig.}"
}
R.id.rx_medicine_food ->{
bundle.clear()
bundle.putString("web_site_url","${BuildConfig.h5url}pages/index/index?pageId=herbal")
RouteManager.goAct(ARouterUrl.H5_ACT,bundle)
}
R.id.rx_food_diary ->{
bundle.clear()
bundle.putString("web_site_url","${BuildConfig.h5url}pages/index/index?pageId=diary")
RouteManager.goAct(ARouterUrl.H5_ACT,bundle)
}
R.id.rx_more ->{
CommonToastUtils.showToast("敬请期待")
}
}

@ -302,7 +302,7 @@ class MainActivity : BaseVmAct<MainVm>(), Consumer<AbstractMeasureData> {
it[3]?.let {
if(it != null && it.size > 0){
// DialogActivities(this,it[0].imgUrl).show()
DialogActivities(this,it[0]).show()
}
}

@ -19,6 +19,7 @@ import com.xty.common.arouter.RouteManager
import com.xty.common.picture.PictureUtils
import com.xty.common.util.SpannableUtils
import com.xty.network.model.FoodRecoginzeInfo
import com.zj365.dc.BuildConfig
import com.zj365.dc.adapter.RecognizeResultAdapter
import com.zj365.dc.databinding.ActRecognizeResultBinding
import com.zj365.dc.vm.DietManagementVm
@ -35,6 +36,10 @@ class RecognizeResultAct : BaseVmAct<DietManagementVm>() {
var type:String? = null
var fileUrl :String? = null
var currentId:String?= null
var foodRecoginzeInfo: FoodRecoginzeInfo? = null
override fun liveObserver() {
mViewModel.foodRecoginzeInfoLiveData.observe(this){
adapter.setNewInstance(it.data)
@ -61,6 +66,12 @@ class RecognizeResultAct : BaseVmAct<DietManagementVm>() {
}
binding.tvDetail.setOnClickListener {
currentId?.let {
bundle.clear()
bundle.putString("web_site_url","${BuildConfig.h5url}pages/index/index?pageId=mealsDetail&id=${it}")
RouteManager.goAct(ARouterUrl.H5_ACT,bundle)
}
}
@ -72,7 +83,13 @@ class RecognizeResultAct : BaseVmAct<DietManagementVm>() {
binding.recycler.layoutManager = LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false)
binding.recycler.adapter = adapter
adapter.setOnItemChildClickListener { adapter, view, position ->
val foodBean = adapter.getItem(position) as FoodRecoginzeInfo
foodRecoginzeInfo = adapter.getItem(position) as FoodRecoginzeInfo
foodRecoginzeInfo?.let {
currentId = it.name
binding.tvAnalyzeTitle.text = it.name
val list = mutableListOf<com.xty.common.model.ReportBean>()
}
}
}

@ -189,9 +189,12 @@ class RegisterAct : BaseVmAct<RegisterVm>() {
timer = null
}
mViewModel.login(binding.mAccount.text.toString().trim(),binding.mPsw.text.toString().trim())
runOnUiThread {
RxActivityTool.finishActivity(LoginAct::class.java)
}
}
mViewModel.codeLive.observe(this) {
timeStart()
binding.mTvCode.apply {

@ -12,6 +12,8 @@ import com.bumptech.glide.request.target.SimpleTarget
import com.bumptech.glide.request.transition.Transition
import com.gyf.immersionbar.ImmersionBar
import com.tamsiree.rxkit.RxDeviceTool
import com.tencent.smtt.export.external.TbsCoreSettings
import com.tencent.smtt.sdk.QbSdk
import com.umeng.commonsdk.UMConfigure
import com.xty.base.act.BaseVmAct
import com.xty.common.Const
@ -47,6 +49,7 @@ class WelcomeAct : BaseVmAct<WelcomeVm>() {
private val prevDialog by lazy {
PrevDialog(this, {
startTimer()
// initX5()
MMkvHelper.put("private", "")
}) {
finish()
@ -231,6 +234,8 @@ class WelcomeAct : BaseVmAct<WelcomeVm>() {
JPushHelper(this).stopOrResumeJPush(MMkvHelper.getBoolean(Const.NOTICE_FLAG))
}
override fun onDestroy() {
job?.let {
it.cancel()

@ -214,30 +214,30 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>() , EasyPermission
} else {
}*/
if (deviceType == "X1" || deviceType == "X2") {
goPage(index - 1)
/*if (deviceType == "X1" || deviceType == "X2") {
goPage(index - 2)
} else {
goPage(index - 1)
}
}*/
}
6 -> {
val deviceType = MMkvHelper.getString(Const.DEVICE_TYPE)
if (deviceType == "X1" || deviceType == "X2") {
/*if (deviceType == "X1" || deviceType == "X2") {
goPage(4)
} else {
} else {*/
goPage(index - 1)
}
// }
}
9 -> { //心电隐藏的前提下尿酸为8 否则为9
val deviceType = MMkvHelper.getString(Const.DEVICE_TYPE)
if (deviceType == "X1" || deviceType == "X2") {
/* if (deviceType == "X1" || deviceType == "X2") {
goPage(6)
} else {
} else {*/
goPage(7)
}
// }
}
7 -> { //血糖
@ -257,11 +257,11 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>() , EasyPermission
// }
// }
val deviceType = MMkvHelper.getString(Const.DEVICE_TYPE)
if (deviceType == "X1" || deviceType == "X2") {
/*if (deviceType == "X1" || deviceType == "X2") {
goPage(5)
} else {
} else {*/
goPage(index - 1)
}
// }
}
10 -> { // //心电隐藏的前提下血脂为9 否则为10

@ -4,6 +4,7 @@ import android.Manifest
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.text.TextUtils
import android.view.View
import androidx.annotation.RequiresApi
import com.xty.base.dialog.AppUpdateDialog
@ -23,6 +24,7 @@ import com.xty.network.model.SettingBean
import com.zj365.dc.BuildConfig
import com.zj365.dc.activity.MainActivity
import com.zj365.dc.databinding.FragMineBinding
import com.zj365.health.act.HealthMainAct
import com.zj365.health.weight.DialogTip
import com.zj365.mime.act.DevInfoAct
import com.zj365.mime.vm.SettingVm
@ -142,7 +144,21 @@ class MineFrag : BaseVmFrag<SettingVm>(),EasyPermissions.PermissionCallbacks {
if(MMkvHelper.getLong(Const.USER_ID).toString() == "0"){
RouteManager.goAct(ARouterUrl.LOGIN_ACT)
}else {
CommonToastUtils.showToast("敬请期待")
// CommonToastUtils.showToast("敬请期待")
bundle.clear()
bundle.putInt("page", 0)
bundle.putBoolean("isDemonstrate", (requireActivity() as MainActivity).isDemonstrate)
val id = if (MMkvHelper.getLong(Const.USER_ID).toString() == "0") {
""
} else {
MMkvHelper.getLong(Const.USER_ID).toString()
}
bundle.putString("id", id)
bundle.putString("sex", CommonUtils.getMyUserInfo()?.sex.toString())
RouteManager.goAct(ARouterUrl.HEALTHMAIN, bundle)
}
}
@ -317,7 +333,7 @@ class MineFrag : BaseVmFrag<SettingVm>(),EasyPermissions.PermissionCallbacks {
}
user = it.user
binding.mName.text = it.user.name
binding.mPhone.text = "账户:${it.user.phone}"
binding.mPhone.text = "${it.user.phone}"
// binding.mDk.text = it.clock.toString()
// binding.mLevel.text = it.grade
if (it.user.avatarUrl.isNullOrEmpty()) {

@ -9,63 +9,45 @@
<include layout="@layout/title_white_bar"
android:id="@+id/title"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_margin="@dimen/dp_14"
android:paddingTop="@dimen/dp_22"
android:paddingLeft="@dimen/dp_16"
android:paddingRight="@dimen/dp_23"
android:paddingBottom="@dimen/dp_26"
android:background="@drawable/shape_8round_white">
<LinearLayout
android:layout_width="match_parent"
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
>
<com.ruffian.library.widget.RView
android:layout_width="@dimen/dp_4"
android:layout_height="@dimen/dp_18"
app:background_normal="@color/col_02c"
app:corner_radius="2dp"
/>
android:background="@mipmap/bg_hot_card_analysis"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/dp_40"/>
<TextView
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/col_313"
android:text="提示文案标题"
android:layout_marginTop="@dimen/dp_21"
android:textSize="@dimen/sp_16"
android:textStyle="bold"
android:textSize="@dimen/sp_17"
android:paddingHorizontal="@dimen/dp_10"
/>
</LinearLayout>
android:gravity="center"
android:text="支持菜肴、果蔬、零食拍照识别"
android:textColor="@color/col_333"/>
<TextView
android:id="@+id/tv_content"
android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_21"
android:layout_gravity="center_horizontal"
android:text=" 平台能通过照片分析出大部分食物、水果、 蔬菜、菜品上传更清晰完整的照片,分析结果更准确,热量、含脂率、人体所需元素、配伍禁忌推荐、个性化食物推荐。"
android:textSize="@dimen/sp_14"
android:textColor="@color/col_313"/>
</LinearLayout>
android:textColor="@color/col_333"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginLeft="@dimen/dp_15"
android:layout_marginRight="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_46">
android:orientation="vertical"
android:layout_marginLeft="@dimen/dp_58"
android:layout_marginRight="@dimen/dp_58"
android:layout_marginTop="@dimen/dp_24">
<TextView
android:id="@+id/tv_dishes"
android:layout_width="@dimen/dp_0"
android:layout_height="@dimen/dp_46"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_40"
android:background="@drawable/shape_r25_02c"
android:textColor="@color/white"
android:textSize="@dimen/sp_18"
@ -75,12 +57,10 @@
<TextView
android:id="@+id/tv_fruit_vegetable"
android:layout_width="@dimen/dp_0"
android:layout_height="@dimen/dp_46"
android:layout_weight="1"
android:layout_marginLeft="@dimen/dp_17"
android:layout_marginRight="@dimen/dp_17"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_40"
android:background="@drawable/shape_r25_02c"
android:layout_marginTop="@dimen/dp_16"
android:textColor="@color/white"
android:textSize="@dimen/sp_18"
android:textStyle="bold"
@ -89,11 +69,11 @@
<TextView
android:id="@+id/tv_snack"
android:layout_width="@dimen/dp_0"
android:layout_height="@dimen/dp_46"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_40"
android:background="@drawable/shape_r25_02c"
android:textColor="@color/white"
android:layout_marginTop="@dimen/dp_16"
android:textSize="@dimen/sp_18"
android:textStyle="bold"
android:gravity="center"

@ -40,22 +40,15 @@
android:text="相似解析"/>
</LinearLayout>
<androidx.core.widget.NestedScrollView
<LinearLayout
android:id="@+id/ll_analyze_result_title"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/ll_analyze"
android:layout_alignParentBottom="true"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="@dimen/dp_14"
android:layout_marginRight="@dimen/dp_14"
android:layout_marginBottom="@dimen/dp_42"
android:layout_marginTop="@dimen/dp_12"
android:fitsSystemWindows="true"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_below="@+id/ll_analyze"
android:paddingTop="@dimen/dp_22"
android:paddingLeft="@dimen/dp_16"
android:paddingRight="@dimen/dp_16"
@ -95,17 +88,63 @@
android:textSize="@dimen/sp_18"
android:textColor="@color/col_313"
tools:text="剁椒鱼头"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_below="@+id/ll_analyze_result_title"
android:paddingTop="@dimen/dp_22"
android:paddingLeft="@dimen/dp_16"
android:paddingRight="@dimen/dp_16"
android:paddingBottom="@dimen/dp_25"
android:layout_marginLeft="@dimen/dp_14"
android:layout_marginRight="@dimen/dp_14"
android:layout_marginTop="@dimen/dp_12"
android:background="@drawable/shape_8round_white">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
>
<com.ruffian.library.widget.RView
android:layout_width="@dimen/dp_4"
android:layout_height="@dimen/dp_18"
app:background_normal="@color/col_02c"
app:corner_radius="2dp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv_analyze_content"
android:textSize="@dimen/sp_14"
android:textColor="@color/col_313"
android:layout_marginTop="@dimen/dp_14"/>
android:text="营养成分"
android:textStyle="bold"
android:textSize="@dimen/sp_17"
android:paddingHorizontal="@dimen/dp_10"
/>
</LinearLayout>
<com.xty.common.weight.MyProgressCircleView
android:id="@+id/mCircle"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_140"
android:layout_marginTop="@dimen/dp_9"
android:layout_marginEnd="@dimen/dp_9"
android:paddingTop="@dimen/dp_5"
android:paddingEnd="@dimen/dp_6"
android:paddingBottom="@dimen/dp_5"
app:circle_stroke_width="@dimen/dp_16"
app:count="3"
app:example_length="@dimen/dp_1"
app:example_size="@dimen/dp_5"
app:percent_size="@dimen/sp_12" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
<LinearLayout

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

@ -1,4 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xty.base">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>

@ -0,0 +1,215 @@
package com.xty.base.act
import android.R
import android.annotation.SuppressLint
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.text.TextUtils
import android.view.KeyEvent
import android.view.WindowManager
import com.alibaba.android.arouter.facade.annotation.Route
import com.tencent.smtt.sdk.WebChromeClient
import com.tencent.smtt.sdk.WebSettings
import com.tencent.smtt.sdk.WebView
import com.tencent.smtt.sdk.WebViewClient
import com.xty.base.databinding.ActBaseTencentWebviewBinding
import com.xty.base.h5.CloudJSBridge
import com.xty.base.h5.IJsBridge
import com.xty.base.vm.BaseVm
import com.xty.common.LogUtils
import com.xty.common.arouter.ARouterUrl
@Route(path = ARouterUrl.H5_ACT)
class BaseTenCentWebViewActivity: BaseVmAct<BaseVm>(),IJsBridge{
val binding by lazy { ActBaseTencentWebviewBinding.inflate(layoutInflater) }
var mWebSetting: WebSettings? = null
var mUrl:String? = null
val cloudJSBridge by lazy { CloudJSBridge(this@BaseTenCentWebViewActivity,this) }
companion object{
val WEB_SITE_URL = "web_site_url"
val WEB_SITE_TITLE = "web_title"
}
override fun initView() {
super.initView()
initWebViewSettings()
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
if (!TextUtils.isEmpty(mUrl)) {
loadWebView(mUrl!!)
}
var data = Bundle()
//true表示标准全屏false表示X5全屏不设置默认false
//true表示标准全屏false表示X5全屏不设置默认false
data.putBoolean("standardFullScreen", false)
//false关闭小窗true开启小窗不设置默认true
//false关闭小窗true开启小窗不设置默认true
data.putBoolean("supportLiteWnd", false)
//1以页面内开始播放2以全屏开始播放不设置默认1
//1以页面内开始播放2以全屏开始播放不设置默认1
data.putInt("DefaultVideoScreen", 2)
if (binding.webView.x5WebViewExtension != null) {
binding.webView.x5WebViewExtension.invokeMiscMethod("setVideoParams", data)
}
binding.webView.addJavascriptInterface(cloudJSBridge,"business")
}
override fun liveObserver() {
}
override fun setLayout()= binding.root
@SuppressLint("SetJavaScriptEnabled")
open fun initWebViewSettings() {
mUrl = intent.getStringExtra(WEB_SITE_URL)
LogUtils.e("BaseTenCentWebViewActivity","mUrlmUrl${mUrl}")
mWebSetting = binding.webView.settings
mWebSetting!!.defaultTextEncodingName = "utf-8"
val ua: String = mWebSetting!!.getUserAgentString()
mWebSetting!!.userAgentString = ua.replace(
"Android",
"Android cswldxiaomi"
) //设置webview的浏览器标识
mWebSetting!!.setJavaScriptEnabled(true) //允许调用js
mWebSetting!!.allowFileAccess = true //启用webVIew访问文件数据
mWebSetting!!.layoutAlgorithm = WebSettings.LayoutAlgorithm.NARROW_COLUMNS
mWebSetting!!.setSupportZoom(true) //设置支持缩放
mWebSetting!!.builtInZoomControls = true
mWebSetting!!.useWideViewPort = true //将图片调整到合适的webView大小
mWebSetting!!.setSupportMultipleWindows(false) //是否支持多窗口
mWebSetting!!.loadWithOverviewMode = true
mWebSetting!!.setAppCacheEnabled(true) //设置是否启用缓存
mWebSetting!!.databaseEnabled = true
mWebSetting!!.domStorageEnabled = true
mWebSetting!!.setGeolocationEnabled(true)
mWebSetting!!.loadsImagesAutomatically = true //设置自动加载图片
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
mWebSetting!!.mixedContentMode = android.webkit.WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
}
mWebSetting!!.blockNetworkImage = false //设置是否显示网络图像false为允许显示
mWebSetting!!.cacheMode = WebSettings.LOAD_DEFAULT //不缓存,只从网络获取数据
mWebSetting!!.setAppCacheMaxSize(Long.MAX_VALUE)
// 复写shouldOverrideUrlLoading()方法,使得打开网页时不调用系统浏览器, 而是在本WebView中显示
binding.webView.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(webView: WebView, url: String): Boolean {
if (url.startsWith("http:") || url.startsWith("https:")) webView.loadUrl(url) else {
try {
val uri = Uri.parse(url)
val intent = Intent(Intent.ACTION_VIEW, uri)
startActivity(intent)
} catch (e: Exception) {
}
}
return true
}
}
binding.webView.webChromeClient = object : WebChromeClient() {
override fun onProgressChanged(
view: WebView,
newProgress: Int
) {
super.onProgressChanged(view, newProgress)
}
}
}
/**
* 加载webview
*
* @param webUrl
*/
protected open fun loadWebView(webUrl: String) {
if (webUrl.startsWith("http:") || webUrl.startsWith("https:"))
binding.webView.loadUrl(webUrl)
else
binding.webView.loadUrl(
"http://$webUrl"
)
}
open fun setJsBridge(jsBridge: CloudJSBridge) {
// this.jsBridge = jsBridge
}
open fun reload() {
binding.webView.reload()
}
override fun onBackPressed() {
if (binding.webView != null) {
if (binding.webView.canGoBack()) {
binding.webView.goBack()
} else {
finish()
}
} else {
finish()
}
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
if (keyCode == KeyEvent.KEYCODE_BACK && binding.webView.canGoBack()) {
binding.webView.goBack() // 返回前一个webview页面
return true
}
return super.onKeyDown(keyCode, event)
}
override fun sendDataToJS(functionName: String, data: String) {
if (functionName.equals("reload")) {
runOnUiThread { reload() }
} else {
runOnUiThread {
binding.webView
.loadUrl(
java.lang.String.format(
"javascript:%s('%s')",
functionName,
R.attr.data
)
)
}
}
}
fun responseToJS(functionName: String?, data: String?) {
runOnUiThread {
binding.webView
.loadUrl(String.format("javascript:%s('%s')", functionName, data))
}
}
override fun switchView(name: String, data: String) {
}
}

@ -2,6 +2,7 @@ package com.xty.base.dialog
import android.content.Context
import android.graphics.Bitmap
import android.os.Bundle
import android.view.View
import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.SimpleTarget
@ -9,21 +10,23 @@ import com.bumptech.glide.request.transition.Transition
import com.xty.base.databinding.DialogActivitiesBinding
import com.xty.common.R
import com.xty.common.SizeUtil
import com.xty.common.arouter.ARouterUrl
import com.xty.common.arouter.RouteManager
import com.xty.common.setBigImage
import com.xty.common.setImage
import com.xty.common.setImageUser
import com.xty.network.model.BannerBean
class DialogActivities (context:Context,var imgUrl:String?): BaseDialog(context) {
class DialogActivities (context:Context,var bannerBean: BannerBean?): BaseDialog(context) {
val binding by lazy { DialogActivitiesBinding.inflate(layoutInflater) }
override fun setLayout() = binding.root
override fun initView() {
super.initView()
setDialogPadding(SizeUtil.dp2px(context, 30f), 0, SizeUtil.dp2px(context, 30f), 0)
imgUrl?.let {
binding.imgActivies.setImage(context,it)
/* Glide.with(context).asBitmap().load(it).error(R.mipmap.ic_welcome_main_bg)
bannerBean?.let {
binding.imgActivies.setBigImage(context,it.imgUrl)
/*Glide.with(context).asBitmap().load(it.imgUrl).error(R.mipmap.ic_welcome_main_bg)
.into(object : SimpleTarget<Bitmap?>() {
override fun onResourceReady(
resource: Bitmap,
@ -38,6 +41,12 @@ class DialogActivities (context:Context,var imgUrl:String?): BaseDialog(context)
binding.imgClose.setOnClickListener { dismiss() }
binding.imgActivies.setOnClickListener {
bannerBean?.let {
var bundle = Bundle()
bundle.putString("title", it.title)
bundle.putString("url", it.linkAddress)
RouteManager.goAct(ARouterUrl.WEB_ACT, bundle)
}
}
}

@ -0,0 +1,56 @@
package com.xty.base.h5
import android.content.Context
import android.webkit.JavascriptInterface
import com.xty.base.act.BaseVmAct
import com.xty.base.act.IBaseAct
import com.xty.common.Const
import com.xty.common.LogUtils
import com.xty.common.MMkvHelper
import com.xty.common.util.ToastUtils
import org.json.JSONObject
open class CloudJSBridge(val context: Context, val listener: IJsBridge) {
private var baseActivity: BaseVmAct<*> = context as BaseVmAct<*>
@JavascriptInterface
fun getBaseInfoData(str: String?) {
LogUtils.e("CloudJSBridge","getBaseInfoData str")
str?.apply {
val userId = if (MMkvHelper.getLong(Const.USER_ID).toString() == "0") {
""
} else { LogUtils.e("CloudJSBridge","str")
MMkvHelper.getLong(Const.USER_ID).toString()
}
val jsonObject = JSONObject()
jsonObject.put("statuHeight", WebUtils.getStatesBar())
jsonObject.put("token", MMkvHelper.getString(Const.Auth_Token))
jsonObject.put("userId", userId)
listener.sendDataToJS("sendBaseInfo", jsonObject.toString())
}
}
@JavascriptInterface
fun getIsFromApp(str:String?){
LogUtils.e("CloudJSBridge","getIsFromApp str")
str?.let {
val jsonObject = JSONObject()
jsonObject.put("isAPP", 1)
listener.sendDataToJS("sendIsFrom ", jsonObject.toString())
}
}
@JavascriptInterface
fun onBack(str: String?){
LogUtils.e("CloudJSBridge","onBack str")
baseActivity.finish()
}
@JavascriptInterface
fun gotoElectronicFence(str: String?){
LogUtils.e("CloudJSBridge","gotoElectronicFence str")
ToastUtils(context).showToast("敬请期待")
}
}

@ -0,0 +1,7 @@
package com.xty.base.h5
interface IJsBridge {
fun sendDataToJS(functionName: String, data: String)
fun switchView(name: String, data: String)
}

@ -0,0 +1,11 @@
package com.xty.base.h5
import android.content.Context
class JsBridge(context: Context, listener: IJsBridge) : CloudJSBridge(context, listener) {
}

@ -0,0 +1,30 @@
package com.xty.base.h5
import com.xty.base.utils.ContextUtils
import com.xty.base.utils.SystemBarHelper
import com.xty.base.utils.SystemBarHelper.getStatusBarHeight
object WebUtils {
private var mSbar = -1
/**
* 获取状态栏高度
*
* @return 状态栏高度px
*/
@Synchronized
fun getStatesBar(): Int {
if (mSbar < 0) {
mSbar = getStatusBarHeight(ContextUtils.getContext())
}
return mSbar
}
@Synchronized
fun getDensityDpi(): Int {
val displayMetrics = ContextUtils.getApplication().resources.displayMetrics
return displayMetrics.density.toInt()
}
}

@ -0,0 +1,48 @@
package com.xty.base.utils
import android.app.Application
import android.content.Context
object ContextUtils {
private var context: Context? = null
private var mApplication: Application? = null
fun ContextUtils() {
throw UnsupportedOperationException("u can't instantiate me...")
}
/**
* 初始化工具类
*
* @param context 上下文
*/
fun init(context: Context) {
ContextUtils.context = context.applicationContext
if (context is Application) {
mApplication = context.getApplicationContext() as Application
}
}
/**
* 获取ApplicationContext
*
* @return ApplicationContext
*/
fun getContext(): Context {
if (context != null) return context!!
throw NullPointerException("u should init first")
}
/**
* 获取ApplicationContext
*
* @return ApplicationContext
*/
fun getApplication(): Application {
if (mApplication != null) return mApplication!!
throw NullPointerException("u should init first")
}
}

@ -0,0 +1,81 @@
package com.xty.base.utils;
import android.app.Activity;
import android.content.Context;
import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public final class NetworkUtils {
public static int NET_ETHERNET = 1;
public static int NET_WIFI = 2;
public static int NET_NOCONNECT = 0;
/**
*
*
* @param
* @return
*/
public static boolean isNetworkAvailable(Context activity) {
Context context = activity;
if (activity instanceof Activity) {
context = activity.getApplicationContext();
}
//获取手机所有连接管理对象包括对wi-fi,net等连接的管理
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager == null) {
return false;
} else {
// 获取NetworkInfo对象
NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();
if (networkInfo != null && networkInfo.length > 0) {
for (int i = 0; i < networkInfo.length; i++) {
/**
System.out.println(i + "===状态==="
+ networkInfo[i].getState());
System.out.println(i + "===类型==="
+ networkInfo[i].getTypeName());
**/
//判断当前网络状态是否为连接状态
if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
public static int isNetworkType(Context context) {
ConnectivityManager connectMgr = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ethNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_ETHERNET);
NetworkInfo wifiNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (ethNetInfo != null && ethNetInfo.isConnected()) {
return NET_ETHERNET;
} else if (wifiNetInfo != null && wifiNetInfo.isConnected()) {
return NET_WIFI;
} else {
return NET_NOCONNECT;
}
}
/**
* GPS
* @param
* @return
*/
public static boolean isGpsEnabled(Context context){
//获取位置服务
LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
//返回开启状态
return lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
}

@ -0,0 +1,22 @@
package com.xty.base.utils
import android.content.Context
import android.os.Build
object SystemBarHelper {
/**
* 获取状态栏高度
*/
fun getStatusBarHeight(context: Context): Int {
var result = 0
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
val resId = context.resources.getIdentifier("status_bar_height", "dimen", "android")
if (resId > 0) {
result = context.resources.getDimensionPixelSize(resId)
}
}
return result
}
}

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.tencent.smtt.sdk.WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/webView"/>
</LinearLayout>

@ -4,21 +4,25 @@
android:orientation="vertical"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="match_parent">
<ImageView
android:id="@+id/img_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp_9"
android:layout_gravity="end"
android:layout_marginRight="32dp"
android:background="@mipmap/icon_close"/>
<ImageView
<com.ruffian.library.widget.RImageView
android:id="@+id/img_activies"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxHeight="@dimen/dp_306"
android:maxWidth="@dimen/dp_312"
android:scaleType="centerCrop"
android:maxHeight="@dimen/dp_500"
android:adjustViewBounds="true"
app:is_circle="false"
app:corner_radius="@dimen/dp_8"
/>

@ -87,6 +87,7 @@ dependencies {
api files('libs/rtk-bbpro-core-1.5.9.jar')
api files('libs/rtk-core-1.1.7.jar')
api files('libs/rtk-dfu-3.2.20.jar')
// api files('tbs_sdk_thirdapp_v4.3.0.386_44286_sharewithdownloadwithfile_withoutGame_obfs_20230210_114429.jar')
api project(":AYCrashGuard")
kapt rely.arouter_compiler
kapt rely.glide_compiler

@ -9,6 +9,7 @@ import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Build
import android.util.Log
import cat.ereza.customactivityoncrash.CustomActivityOnCrash
import cat.ereza.customactivityoncrash.config.CaocConfig
import com.alibaba.android.arouter.launcher.ARouter
@ -25,6 +26,8 @@ import com.tencent.bugly.crashreport.CrashReport
import com.tencent.mm.opensdk.constants.ConstantsAPI
import com.tencent.mm.opensdk.openapi.IWXAPI
import com.tencent.mm.opensdk.openapi.WXAPIFactory
import com.tencent.smtt.export.external.TbsCoreSettings
import com.tencent.smtt.sdk.QbSdk
import com.umeng.commonsdk.UMConfigure
import com.xty.common.*
import com.xty.common.bracelet.checkBlueConnectPermission
@ -68,6 +71,7 @@ class MyApp : Application() {
initUMengSdk()
initRefresh()
registerBlueToothBoardCastReceiver()
initX5()
//bugly 上报 在release版本才会上报
// if(BuildConfig.isRelease){
// CrashReport.initCrashReport(this, "", true)
@ -170,6 +174,27 @@ class MyApp : Application() {
RxTool.init(this)
}
private fun initX5() {
QbSdk.setCoreMinVersion(QbSdk.CORE_VER_ENABLE_202112);
val map = HashMap<String, Any>()
map[TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER] = true
map[TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE] = true
QbSdk.initTbsSettings(map)
val cb: QbSdk.PreInitCallback =
object : QbSdk.PreInitCallback {
override fun onViewInitFinished(arg0: Boolean) {
//x5內核初始化完成的回调为true表示x5内核加载成功否则表示x5内核加载失败会自动切换到系统内核。
Log.d("webX5", " onViewInitFinished is $arg0")
}
override fun onCoreInitFinished() {}
}
//x5内核初始化接口
if (!QbSdk.isTbsCoreInited()) {
QbSdk.initX5Environment(applicationContext, cb)
}
}
/**
* 初始化手环SDK

@ -224,6 +224,7 @@ class ARouterUrl {
const val RICH_TEXT = "/base/com/xty/base/act/RichTextAct"
const val CHAT_MSG = "/base/com/xty/base/act/ChatMsgAct"
const val VIDEO_PLAY = "/base/com/xty/base/act/VideoPlayerAct"
const val H5_ACT = "/base/com/xty/base/act/BaseTenCentWebViewActivity"
//service

@ -3,6 +3,6 @@
<corners android:radius="@dimen/dp_20" />
<solid android:color="@color/white" />
<stroke android:color="@color/col_25C"
<stroke android:color="@color/col_02c"
android:width="@dimen/dp_1"/>
</shape>

@ -3,6 +3,6 @@
<corners android:radius="@dimen/dp_6" />
<solid android:color="@color/white" />
<stroke android:color="@color/col_02b"
<stroke android:color="@color/col_02c"
android:width="@dimen/dp_1"/>
</shape>

@ -29,7 +29,10 @@ ext {
release_url: "https://auprty.com/app/"*/
//
debug_url : "http://java01.zhongjian365.com/app/",
release_url: "http://175.6.39.20:8181/app/"
release_url: "http://175.6.39.20:8181/app/",
h5_debug_url : "http://testbuilt.zhongjian365.com/",
h5_release_url : "http://built.zhongjian365.com/"
]

@ -35,6 +35,7 @@ android {
buildTypes {
release {
buildConfigField("String","url","\"${url.release_url}\"")
buildConfigField("String","h5url","\"${url.h5_release_url}\"")
buildConfigField("String", "image_prefix","\"${imagePrefix.release_url}\"")
buildConfigField("Boolean","isRelease",String.valueOf(true))
@ -43,7 +44,7 @@ android {
}
debug{
buildConfigField("String","url","\"${url.debug_url}\"")
buildConfigField("String","h5url","\"${url.h5_debug_url}\"")
buildConfigField("Boolean","isRelease",String.valueOf(false))
buildConfigField("String", "image_prefix","\"${imagePrefix.debug_url}\"")
}

@ -251,6 +251,14 @@
<activity android:name=".act.familyhealth.AddFamilyGuardianAct"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity android:name=".act.BloodCalibrationAct"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity android:name=".act.BloodCalibrationHistoryAct"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
</application>
</manifest>

@ -49,7 +49,7 @@
android:paddingTop="@dimen/dp_10"
android:paddingBottom="@dimen/dp_10"
android:text="退出管理"
android:textColor="@color/col_8D0"
android:textColor="@color/col_02c"
android:textSize="@dimen/sp_16"
android:textStyle="bold"
android:visibility="gone" />

@ -35,6 +35,7 @@ android {
release {
buildConfigField("String","url","\"${url.release_url}\"")
buildConfigField("String", "image_prefix","\"${imagePrefix.release_url}\"")
buildConfigField("String","h5url","\"${url.h5_release_url}\"")
buildConfigField("Boolean","isRelease",String.valueOf(true))
minifyEnabled false
@ -42,6 +43,7 @@ android {
}
debug{
buildConfigField("String","url","\"${url.debug_url}\"")
buildConfigField("String","h5url","\"${url.h5_debug_url}\"")
buildConfigField("Boolean","isRelease",String.valueOf(false))
buildConfigField("String", "image_prefix","\"${imagePrefix.debug_url}\"")

@ -16,11 +16,13 @@ import com.xty.common.Const
import com.xty.common.MMkvHelper
import com.xty.common.MyLinkedMovementMethod
import com.xty.common.arouter.ARouterUrl
import com.xty.common.arouter.RouteManager
import com.xty.common.bracelet.YCBBlueConnectHelper
import com.xty.common.event.BlueToothConnectEvent
import com.xty.common.event.MyInfoEvent
import com.xty.network.MyRetrofit
import com.xty.network.model.SettingBean
import com.zj365.mime.BuildConfig
import com.zj365.mime.R
import com.zj365.mime.databinding.ActDevInfoBinding
import com.zj365.mime.vm.SettingVm
@ -118,6 +120,12 @@ class DevInfoAct : BaseVmAct<SettingVm>(),EasyPermissions.PermissionCallbacks {
binding.tvContactKefu.text = span
binding.tvDeviceSetting.setOnClickListener {
bundle.clear()
bundle.putString("web_site_url","${BuildConfig.h5url}pages/index/index?pageId=braceletSetting")
RouteManager.goAct(ARouterUrl.H5_ACT,bundle)
}
}

@ -1,9 +1,11 @@
package com.xty.network.model
import java.io.Serializable
data class BannerBean(
val title: String,
val content: String,
val bannerType: Int,//1:图文展示, 5app内部打开 10web外部跳转 15视频播放】imgUrl 图片地址linkAddress连接地址
val imgUrl: String,
val linkAddress: String
)
):Serializable

@ -3,10 +3,38 @@ package com.xty.network.model
import java.nio.DoubleBuffer
data class FoodRecoginzeInfo(
val heat:Double,
val df:Double,
val cho:Double,
val chol:Double,
val na:DoubleBuffer
val heat:Double, //热量(大卡/100g)
val df:Double, //膳食纤维(g/100g
val cho:Double,//碳水化合物(g/100g)
val chol:Double,//胆固醇(mg/100g)
val na:Double,//钠(mg/100g)
val vit_a:Double,//维生素A(μg/100g)
val vit_b1:Double,//维生素B1(mg/100g)
val vit_c:Double,//维生素C(mg/100g)
val faca:Double,//质量(g)
val protein:Double,//蛋白质(g/100g)
val vit_b2:Double,//维生素B2(mg/100g)
val vpp:Double,//烟酸(mg/100g)
val vit_e:Double,//维生素E(mg/100g)
val name:String,//食品中文名
val fat:Double,//脂肪(g/100g)
val ca:Double,//钙(mg/100g)
val as_name:String,//别名
val fe:Double//铁(mg/100g)
) {
}
Loading…
Cancel
Save