diff --git a/app/src/main/assets/DeviceParameter.json b/app/src/main/assets/DeviceParameter.json new file mode 100644 index 0000000..6ea3c8f --- /dev/null +++ b/app/src/main/assets/DeviceParameter.json @@ -0,0 +1,26 @@ +[ + { + "deviceName": "YTJ010001", + "wifi": "YTJ010001_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.151" + }, + { + "deviceName": "YTJ010002", + "wifi": "YTJ010002_5G", + "pwd": "zhsz20311hw", + "cameraIp": "192.168.10.137" + }, + { + "deviceName": "YTJ010003", + "wifi": "YTJ010003_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.153" + }, + { + "deviceName": "YTJ010004", + "wifi": "YTJ010004_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.154" + } +] \ No newline at end of file diff --git a/app/src/main/assets/DeviceParameter.json b/app/src/main/assets/DeviceParameter.json new file mode 100644 index 0000000..6ea3c8f --- /dev/null +++ b/app/src/main/assets/DeviceParameter.json @@ -0,0 +1,26 @@ +[ + { + "deviceName": "YTJ010001", + "wifi": "YTJ010001_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.151" + }, + { + "deviceName": "YTJ010002", + "wifi": "YTJ010002_5G", + "pwd": "zhsz20311hw", + "cameraIp": "192.168.10.137" + }, + { + "deviceName": "YTJ010003", + "wifi": "YTJ010003_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.153" + }, + { + "deviceName": "YTJ010004", + "wifi": "YTJ010004_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.154" + } +] \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java new file mode 100644 index 0000000..0398681 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java @@ -0,0 +1,41 @@ +package com.casic.br.operationsite.model; + +public class DeviceParameterModel { + + private String deviceName; + private String wifi; + private String pwd; + private String cameraIp; + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getWifi() { + return wifi; + } + + public void setWifi(String wifi) { + this.wifi = wifi; + } + + public String getPwd() { + return pwd; + } + + public void setPwd(String pwd) { + this.pwd = pwd; + } + + public String getCameraIp() { + return cameraIp; + } + + public void setCameraIp(String cameraIp) { + this.cameraIp = cameraIp; + } +} diff --git a/app/src/main/assets/DeviceParameter.json b/app/src/main/assets/DeviceParameter.json new file mode 100644 index 0000000..6ea3c8f --- /dev/null +++ b/app/src/main/assets/DeviceParameter.json @@ -0,0 +1,26 @@ +[ + { + "deviceName": "YTJ010001", + "wifi": "YTJ010001_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.151" + }, + { + "deviceName": "YTJ010002", + "wifi": "YTJ010002_5G", + "pwd": "zhsz20311hw", + "cameraIp": "192.168.10.137" + }, + { + "deviceName": "YTJ010003", + "wifi": "YTJ010003_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.153" + }, + { + "deviceName": "YTJ010004", + "wifi": "YTJ010004_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.154" + } +] \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java new file mode 100644 index 0000000..0398681 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java @@ -0,0 +1,41 @@ +package com.casic.br.operationsite.model; + +public class DeviceParameterModel { + + private String deviceName; + private String wifi; + private String pwd; + private String cameraIp; + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getWifi() { + return wifi; + } + + public void setWifi(String wifi) { + this.wifi = wifi; + } + + public String getPwd() { + return pwd; + } + + public void setPwd(String pwd) { + this.pwd = pwd; + } + + public String getCameraIp() { + return cameraIp; + } + + public void setCameraIp(String cameraIp) { + this.cameraIp = cameraIp; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt index d25400c..4bc90b8 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt @@ -1,25 +1,184 @@ package com.casic.br.operationsite.view +import android.annotation.SuppressLint +import android.content.Context +import android.net.ConnectivityManager +import android.net.Network +import android.net.NetworkCapabilities +import android.net.NetworkRequest +import android.net.wifi.WifiNetworkSpecifier +import android.os.Build import android.os.Bundle +import android.util.Log +import android.view.MotionEvent import android.widget.LinearLayout import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityDeviceControlByNativeBinding import com.casic.br.operationsite.extensions.initImmersionBar -import com.casic.br.operationsite.utils.LocaleConstant +import com.casic.br.operationsite.model.DeviceParameterModel import com.casic.br.operationsite.utils.VideoPlayerManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.readAssetsFile +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class DeviceControlByNativeActivity : KotlinBaseActivity() { - override fun initEvent() { + private val kTag = "DeviceControlByNativeActivity" + private val context = this + private val gson by lazy { Gson() } + private lateinit var deviceParams: List + private var connectivityManager: ConnectivityManager? = null + + @SuppressLint("ClickableViewAccessibility") + override fun initEvent() { + binding.configSelectView.setOnClickListener { + val deviceArray = ArrayList() + deviceParams.forEach { + deviceArray.add(it.deviceName) + } + + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(deviceArray) + .setItemTextColor(R.color.mainThemeColor.convertColor(this)) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + binding.configSelectView.text = deviceArray[position] + + val parameter = deviceParams[position] + + //设置rtsp相机地址 + val rtsp = "rtsp://${parameter.cameraIp}:554/h265/ch1/sub/av_stream" + VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, rtsp) + + //连接WiFi + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val specifier = WifiNetworkSpecifier.Builder() + .setSsid(parameter.wifi) + .setWpa2Passphrase(parameter.pwd) + .build() + + val request = NetworkRequest.Builder() + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .setNetworkSpecifier(specifier) + .build() + + connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) + as ConnectivityManager + connectivityManager?.requestNetwork(request, networkCallback) + } + } + }).build().show() + } + + binding.leftButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.topButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.rightButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.bottomButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.upScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.downScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + } + + private val networkCallback = object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + super.onAvailable(network) + if (connectivityManager?.bindProcessToNetwork(network) == true) { + "设备连接成功".show(context) + } + } + + override fun onUnavailable() { + + } } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) + val assetsFile = readAssetsFile("DeviceParameter.json") + deviceParams = gson.fromJson( + assetsFile, object : TypeToken>() {}.type + ) + //动态设置rtspPlayerView宽高 val params = binding.rtspPlayerView.layoutParams as LinearLayout.LayoutParams val videoWidth = getScreenWidth() @@ -27,7 +186,6 @@ params.width = videoWidth params.height = videoHeight.toInt() binding.rtspPlayerView.layoutParams = params - VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, LocaleConstant.SUB_RTSP_URL) } override fun initViewBinding(): ActivityDeviceControlByNativeBinding { diff --git a/app/src/main/assets/DeviceParameter.json b/app/src/main/assets/DeviceParameter.json new file mode 100644 index 0000000..6ea3c8f --- /dev/null +++ b/app/src/main/assets/DeviceParameter.json @@ -0,0 +1,26 @@ +[ + { + "deviceName": "YTJ010001", + "wifi": "YTJ010001_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.151" + }, + { + "deviceName": "YTJ010002", + "wifi": "YTJ010002_5G", + "pwd": "zhsz20311hw", + "cameraIp": "192.168.10.137" + }, + { + "deviceName": "YTJ010003", + "wifi": "YTJ010003_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.153" + }, + { + "deviceName": "YTJ010004", + "wifi": "YTJ010004_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.154" + } +] \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java new file mode 100644 index 0000000..0398681 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java @@ -0,0 +1,41 @@ +package com.casic.br.operationsite.model; + +public class DeviceParameterModel { + + private String deviceName; + private String wifi; + private String pwd; + private String cameraIp; + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getWifi() { + return wifi; + } + + public void setWifi(String wifi) { + this.wifi = wifi; + } + + public String getPwd() { + return pwd; + } + + public void setPwd(String pwd) { + this.pwd = pwd; + } + + public String getCameraIp() { + return cameraIp; + } + + public void setCameraIp(String cameraIp) { + this.cameraIp = cameraIp; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt index d25400c..4bc90b8 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt @@ -1,25 +1,184 @@ package com.casic.br.operationsite.view +import android.annotation.SuppressLint +import android.content.Context +import android.net.ConnectivityManager +import android.net.Network +import android.net.NetworkCapabilities +import android.net.NetworkRequest +import android.net.wifi.WifiNetworkSpecifier +import android.os.Build import android.os.Bundle +import android.util.Log +import android.view.MotionEvent import android.widget.LinearLayout import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityDeviceControlByNativeBinding import com.casic.br.operationsite.extensions.initImmersionBar -import com.casic.br.operationsite.utils.LocaleConstant +import com.casic.br.operationsite.model.DeviceParameterModel import com.casic.br.operationsite.utils.VideoPlayerManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.readAssetsFile +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class DeviceControlByNativeActivity : KotlinBaseActivity() { - override fun initEvent() { + private val kTag = "DeviceControlByNativeActivity" + private val context = this + private val gson by lazy { Gson() } + private lateinit var deviceParams: List + private var connectivityManager: ConnectivityManager? = null + + @SuppressLint("ClickableViewAccessibility") + override fun initEvent() { + binding.configSelectView.setOnClickListener { + val deviceArray = ArrayList() + deviceParams.forEach { + deviceArray.add(it.deviceName) + } + + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(deviceArray) + .setItemTextColor(R.color.mainThemeColor.convertColor(this)) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + binding.configSelectView.text = deviceArray[position] + + val parameter = deviceParams[position] + + //设置rtsp相机地址 + val rtsp = "rtsp://${parameter.cameraIp}:554/h265/ch1/sub/av_stream" + VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, rtsp) + + //连接WiFi + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val specifier = WifiNetworkSpecifier.Builder() + .setSsid(parameter.wifi) + .setWpa2Passphrase(parameter.pwd) + .build() + + val request = NetworkRequest.Builder() + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .setNetworkSpecifier(specifier) + .build() + + connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) + as ConnectivityManager + connectivityManager?.requestNetwork(request, networkCallback) + } + } + }).build().show() + } + + binding.leftButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.topButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.rightButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.bottomButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.upScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.downScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + } + + private val networkCallback = object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + super.onAvailable(network) + if (connectivityManager?.bindProcessToNetwork(network) == true) { + "设备连接成功".show(context) + } + } + + override fun onUnavailable() { + + } } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) + val assetsFile = readAssetsFile("DeviceParameter.json") + deviceParams = gson.fromJson( + assetsFile, object : TypeToken>() {}.type + ) + //动态设置rtspPlayerView宽高 val params = binding.rtspPlayerView.layoutParams as LinearLayout.LayoutParams val videoWidth = getScreenWidth() @@ -27,7 +186,6 @@ params.width = videoWidth params.height = videoHeight.toInt() binding.rtspPlayerView.layoutParams = params - VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, LocaleConstant.SUB_RTSP_URL) } override fun initViewBinding(): ActivityDeviceControlByNativeBinding { diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml new file mode 100644 index 0000000..b7e06e3 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/DeviceParameter.json b/app/src/main/assets/DeviceParameter.json new file mode 100644 index 0000000..6ea3c8f --- /dev/null +++ b/app/src/main/assets/DeviceParameter.json @@ -0,0 +1,26 @@ +[ + { + "deviceName": "YTJ010001", + "wifi": "YTJ010001_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.151" + }, + { + "deviceName": "YTJ010002", + "wifi": "YTJ010002_5G", + "pwd": "zhsz20311hw", + "cameraIp": "192.168.10.137" + }, + { + "deviceName": "YTJ010003", + "wifi": "YTJ010003_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.153" + }, + { + "deviceName": "YTJ010004", + "wifi": "YTJ010004_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.154" + } +] \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java new file mode 100644 index 0000000..0398681 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java @@ -0,0 +1,41 @@ +package com.casic.br.operationsite.model; + +public class DeviceParameterModel { + + private String deviceName; + private String wifi; + private String pwd; + private String cameraIp; + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getWifi() { + return wifi; + } + + public void setWifi(String wifi) { + this.wifi = wifi; + } + + public String getPwd() { + return pwd; + } + + public void setPwd(String pwd) { + this.pwd = pwd; + } + + public String getCameraIp() { + return cameraIp; + } + + public void setCameraIp(String cameraIp) { + this.cameraIp = cameraIp; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt index d25400c..4bc90b8 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt @@ -1,25 +1,184 @@ package com.casic.br.operationsite.view +import android.annotation.SuppressLint +import android.content.Context +import android.net.ConnectivityManager +import android.net.Network +import android.net.NetworkCapabilities +import android.net.NetworkRequest +import android.net.wifi.WifiNetworkSpecifier +import android.os.Build import android.os.Bundle +import android.util.Log +import android.view.MotionEvent import android.widget.LinearLayout import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityDeviceControlByNativeBinding import com.casic.br.operationsite.extensions.initImmersionBar -import com.casic.br.operationsite.utils.LocaleConstant +import com.casic.br.operationsite.model.DeviceParameterModel import com.casic.br.operationsite.utils.VideoPlayerManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.readAssetsFile +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class DeviceControlByNativeActivity : KotlinBaseActivity() { - override fun initEvent() { + private val kTag = "DeviceControlByNativeActivity" + private val context = this + private val gson by lazy { Gson() } + private lateinit var deviceParams: List + private var connectivityManager: ConnectivityManager? = null + + @SuppressLint("ClickableViewAccessibility") + override fun initEvent() { + binding.configSelectView.setOnClickListener { + val deviceArray = ArrayList() + deviceParams.forEach { + deviceArray.add(it.deviceName) + } + + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(deviceArray) + .setItemTextColor(R.color.mainThemeColor.convertColor(this)) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + binding.configSelectView.text = deviceArray[position] + + val parameter = deviceParams[position] + + //设置rtsp相机地址 + val rtsp = "rtsp://${parameter.cameraIp}:554/h265/ch1/sub/av_stream" + VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, rtsp) + + //连接WiFi + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val specifier = WifiNetworkSpecifier.Builder() + .setSsid(parameter.wifi) + .setWpa2Passphrase(parameter.pwd) + .build() + + val request = NetworkRequest.Builder() + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .setNetworkSpecifier(specifier) + .build() + + connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) + as ConnectivityManager + connectivityManager?.requestNetwork(request, networkCallback) + } + } + }).build().show() + } + + binding.leftButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.topButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.rightButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.bottomButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.upScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.downScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + } + + private val networkCallback = object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + super.onAvailable(network) + if (connectivityManager?.bindProcessToNetwork(network) == true) { + "设备连接成功".show(context) + } + } + + override fun onUnavailable() { + + } } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) + val assetsFile = readAssetsFile("DeviceParameter.json") + deviceParams = gson.fromJson( + assetsFile, object : TypeToken>() {}.type + ) + //动态设置rtspPlayerView宽高 val params = binding.rtspPlayerView.layoutParams as LinearLayout.LayoutParams val videoWidth = getScreenWidth() @@ -27,7 +186,6 @@ params.width = videoWidth params.height = videoHeight.toInt() binding.rtspPlayerView.layoutParams = params - VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, LocaleConstant.SUB_RTSP_URL) } override fun initViewBinding(): ActivityDeviceControlByNativeBinding { diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml new file mode 100644 index 0000000..b7e06e3 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml new file mode 100644 index 0000000..0a64a44 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/assets/DeviceParameter.json b/app/src/main/assets/DeviceParameter.json new file mode 100644 index 0000000..6ea3c8f --- /dev/null +++ b/app/src/main/assets/DeviceParameter.json @@ -0,0 +1,26 @@ +[ + { + "deviceName": "YTJ010001", + "wifi": "YTJ010001_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.151" + }, + { + "deviceName": "YTJ010002", + "wifi": "YTJ010002_5G", + "pwd": "zhsz20311hw", + "cameraIp": "192.168.10.137" + }, + { + "deviceName": "YTJ010003", + "wifi": "YTJ010003_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.153" + }, + { + "deviceName": "YTJ010004", + "wifi": "YTJ010004_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.154" + } +] \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java new file mode 100644 index 0000000..0398681 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java @@ -0,0 +1,41 @@ +package com.casic.br.operationsite.model; + +public class DeviceParameterModel { + + private String deviceName; + private String wifi; + private String pwd; + private String cameraIp; + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getWifi() { + return wifi; + } + + public void setWifi(String wifi) { + this.wifi = wifi; + } + + public String getPwd() { + return pwd; + } + + public void setPwd(String pwd) { + this.pwd = pwd; + } + + public String getCameraIp() { + return cameraIp; + } + + public void setCameraIp(String cameraIp) { + this.cameraIp = cameraIp; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt index d25400c..4bc90b8 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt @@ -1,25 +1,184 @@ package com.casic.br.operationsite.view +import android.annotation.SuppressLint +import android.content.Context +import android.net.ConnectivityManager +import android.net.Network +import android.net.NetworkCapabilities +import android.net.NetworkRequest +import android.net.wifi.WifiNetworkSpecifier +import android.os.Build import android.os.Bundle +import android.util.Log +import android.view.MotionEvent import android.widget.LinearLayout import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityDeviceControlByNativeBinding import com.casic.br.operationsite.extensions.initImmersionBar -import com.casic.br.operationsite.utils.LocaleConstant +import com.casic.br.operationsite.model.DeviceParameterModel import com.casic.br.operationsite.utils.VideoPlayerManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.readAssetsFile +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class DeviceControlByNativeActivity : KotlinBaseActivity() { - override fun initEvent() { + private val kTag = "DeviceControlByNativeActivity" + private val context = this + private val gson by lazy { Gson() } + private lateinit var deviceParams: List + private var connectivityManager: ConnectivityManager? = null + + @SuppressLint("ClickableViewAccessibility") + override fun initEvent() { + binding.configSelectView.setOnClickListener { + val deviceArray = ArrayList() + deviceParams.forEach { + deviceArray.add(it.deviceName) + } + + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(deviceArray) + .setItemTextColor(R.color.mainThemeColor.convertColor(this)) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + binding.configSelectView.text = deviceArray[position] + + val parameter = deviceParams[position] + + //设置rtsp相机地址 + val rtsp = "rtsp://${parameter.cameraIp}:554/h265/ch1/sub/av_stream" + VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, rtsp) + + //连接WiFi + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val specifier = WifiNetworkSpecifier.Builder() + .setSsid(parameter.wifi) + .setWpa2Passphrase(parameter.pwd) + .build() + + val request = NetworkRequest.Builder() + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .setNetworkSpecifier(specifier) + .build() + + connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) + as ConnectivityManager + connectivityManager?.requestNetwork(request, networkCallback) + } + } + }).build().show() + } + + binding.leftButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.topButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.rightButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.bottomButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.upScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.downScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + } + + private val networkCallback = object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + super.onAvailable(network) + if (connectivityManager?.bindProcessToNetwork(network) == true) { + "设备连接成功".show(context) + } + } + + override fun onUnavailable() { + + } } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) + val assetsFile = readAssetsFile("DeviceParameter.json") + deviceParams = gson.fromJson( + assetsFile, object : TypeToken>() {}.type + ) + //动态设置rtspPlayerView宽高 val params = binding.rtspPlayerView.layoutParams as LinearLayout.LayoutParams val videoWidth = getScreenWidth() @@ -27,7 +186,6 @@ params.width = videoWidth params.height = videoHeight.toInt() binding.rtspPlayerView.layoutParams = params - VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, LocaleConstant.SUB_RTSP_URL) } override fun initViewBinding(): ActivityDeviceControlByNativeBinding { diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml new file mode 100644 index 0000000..b7e06e3 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml new file mode 100644 index 0000000..0a64a44 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_direction.xml b/app/src/main/res/drawable/ic_direction.xml new file mode 100644 index 0000000..50711fb --- /dev/null +++ b/app/src/main/res/drawable/ic_direction.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/assets/DeviceParameter.json b/app/src/main/assets/DeviceParameter.json new file mode 100644 index 0000000..6ea3c8f --- /dev/null +++ b/app/src/main/assets/DeviceParameter.json @@ -0,0 +1,26 @@ +[ + { + "deviceName": "YTJ010001", + "wifi": "YTJ010001_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.151" + }, + { + "deviceName": "YTJ010002", + "wifi": "YTJ010002_5G", + "pwd": "zhsz20311hw", + "cameraIp": "192.168.10.137" + }, + { + "deviceName": "YTJ010003", + "wifi": "YTJ010003_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.153" + }, + { + "deviceName": "YTJ010004", + "wifi": "YTJ010004_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.154" + } +] \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java new file mode 100644 index 0000000..0398681 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java @@ -0,0 +1,41 @@ +package com.casic.br.operationsite.model; + +public class DeviceParameterModel { + + private String deviceName; + private String wifi; + private String pwd; + private String cameraIp; + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getWifi() { + return wifi; + } + + public void setWifi(String wifi) { + this.wifi = wifi; + } + + public String getPwd() { + return pwd; + } + + public void setPwd(String pwd) { + this.pwd = pwd; + } + + public String getCameraIp() { + return cameraIp; + } + + public void setCameraIp(String cameraIp) { + this.cameraIp = cameraIp; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt index d25400c..4bc90b8 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt @@ -1,25 +1,184 @@ package com.casic.br.operationsite.view +import android.annotation.SuppressLint +import android.content.Context +import android.net.ConnectivityManager +import android.net.Network +import android.net.NetworkCapabilities +import android.net.NetworkRequest +import android.net.wifi.WifiNetworkSpecifier +import android.os.Build import android.os.Bundle +import android.util.Log +import android.view.MotionEvent import android.widget.LinearLayout import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityDeviceControlByNativeBinding import com.casic.br.operationsite.extensions.initImmersionBar -import com.casic.br.operationsite.utils.LocaleConstant +import com.casic.br.operationsite.model.DeviceParameterModel import com.casic.br.operationsite.utils.VideoPlayerManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.readAssetsFile +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class DeviceControlByNativeActivity : KotlinBaseActivity() { - override fun initEvent() { + private val kTag = "DeviceControlByNativeActivity" + private val context = this + private val gson by lazy { Gson() } + private lateinit var deviceParams: List + private var connectivityManager: ConnectivityManager? = null + + @SuppressLint("ClickableViewAccessibility") + override fun initEvent() { + binding.configSelectView.setOnClickListener { + val deviceArray = ArrayList() + deviceParams.forEach { + deviceArray.add(it.deviceName) + } + + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(deviceArray) + .setItemTextColor(R.color.mainThemeColor.convertColor(this)) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + binding.configSelectView.text = deviceArray[position] + + val parameter = deviceParams[position] + + //设置rtsp相机地址 + val rtsp = "rtsp://${parameter.cameraIp}:554/h265/ch1/sub/av_stream" + VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, rtsp) + + //连接WiFi + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val specifier = WifiNetworkSpecifier.Builder() + .setSsid(parameter.wifi) + .setWpa2Passphrase(parameter.pwd) + .build() + + val request = NetworkRequest.Builder() + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .setNetworkSpecifier(specifier) + .build() + + connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) + as ConnectivityManager + connectivityManager?.requestNetwork(request, networkCallback) + } + } + }).build().show() + } + + binding.leftButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.topButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.rightButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.bottomButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.upScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.downScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + } + + private val networkCallback = object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + super.onAvailable(network) + if (connectivityManager?.bindProcessToNetwork(network) == true) { + "设备连接成功".show(context) + } + } + + override fun onUnavailable() { + + } } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) + val assetsFile = readAssetsFile("DeviceParameter.json") + deviceParams = gson.fromJson( + assetsFile, object : TypeToken>() {}.type + ) + //动态设置rtspPlayerView宽高 val params = binding.rtspPlayerView.layoutParams as LinearLayout.LayoutParams val videoWidth = getScreenWidth() @@ -27,7 +186,6 @@ params.width = videoWidth params.height = videoHeight.toInt() binding.rtspPlayerView.layoutParams = params - VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, LocaleConstant.SUB_RTSP_URL) } override fun initViewBinding(): ActivityDeviceControlByNativeBinding { diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml new file mode 100644 index 0000000..b7e06e3 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml new file mode 100644 index 0000000..0a64a44 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_direction.xml b/app/src/main/res/drawable/ic_direction.xml new file mode 100644 index 0000000..50711fb --- /dev/null +++ b/app/src/main/res/drawable/ic_direction.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..9fcd974 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/assets/DeviceParameter.json b/app/src/main/assets/DeviceParameter.json new file mode 100644 index 0000000..6ea3c8f --- /dev/null +++ b/app/src/main/assets/DeviceParameter.json @@ -0,0 +1,26 @@ +[ + { + "deviceName": "YTJ010001", + "wifi": "YTJ010001_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.151" + }, + { + "deviceName": "YTJ010002", + "wifi": "YTJ010002_5G", + "pwd": "zhsz20311hw", + "cameraIp": "192.168.10.137" + }, + { + "deviceName": "YTJ010003", + "wifi": "YTJ010003_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.153" + }, + { + "deviceName": "YTJ010004", + "wifi": "YTJ010004_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.154" + } +] \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java new file mode 100644 index 0000000..0398681 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java @@ -0,0 +1,41 @@ +package com.casic.br.operationsite.model; + +public class DeviceParameterModel { + + private String deviceName; + private String wifi; + private String pwd; + private String cameraIp; + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getWifi() { + return wifi; + } + + public void setWifi(String wifi) { + this.wifi = wifi; + } + + public String getPwd() { + return pwd; + } + + public void setPwd(String pwd) { + this.pwd = pwd; + } + + public String getCameraIp() { + return cameraIp; + } + + public void setCameraIp(String cameraIp) { + this.cameraIp = cameraIp; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt index d25400c..4bc90b8 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt @@ -1,25 +1,184 @@ package com.casic.br.operationsite.view +import android.annotation.SuppressLint +import android.content.Context +import android.net.ConnectivityManager +import android.net.Network +import android.net.NetworkCapabilities +import android.net.NetworkRequest +import android.net.wifi.WifiNetworkSpecifier +import android.os.Build import android.os.Bundle +import android.util.Log +import android.view.MotionEvent import android.widget.LinearLayout import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityDeviceControlByNativeBinding import com.casic.br.operationsite.extensions.initImmersionBar -import com.casic.br.operationsite.utils.LocaleConstant +import com.casic.br.operationsite.model.DeviceParameterModel import com.casic.br.operationsite.utils.VideoPlayerManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.readAssetsFile +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class DeviceControlByNativeActivity : KotlinBaseActivity() { - override fun initEvent() { + private val kTag = "DeviceControlByNativeActivity" + private val context = this + private val gson by lazy { Gson() } + private lateinit var deviceParams: List + private var connectivityManager: ConnectivityManager? = null + + @SuppressLint("ClickableViewAccessibility") + override fun initEvent() { + binding.configSelectView.setOnClickListener { + val deviceArray = ArrayList() + deviceParams.forEach { + deviceArray.add(it.deviceName) + } + + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(deviceArray) + .setItemTextColor(R.color.mainThemeColor.convertColor(this)) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + binding.configSelectView.text = deviceArray[position] + + val parameter = deviceParams[position] + + //设置rtsp相机地址 + val rtsp = "rtsp://${parameter.cameraIp}:554/h265/ch1/sub/av_stream" + VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, rtsp) + + //连接WiFi + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val specifier = WifiNetworkSpecifier.Builder() + .setSsid(parameter.wifi) + .setWpa2Passphrase(parameter.pwd) + .build() + + val request = NetworkRequest.Builder() + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .setNetworkSpecifier(specifier) + .build() + + connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) + as ConnectivityManager + connectivityManager?.requestNetwork(request, networkCallback) + } + } + }).build().show() + } + + binding.leftButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.topButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.rightButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.bottomButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.upScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.downScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + } + + private val networkCallback = object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + super.onAvailable(network) + if (connectivityManager?.bindProcessToNetwork(network) == true) { + "设备连接成功".show(context) + } + } + + override fun onUnavailable() { + + } } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) + val assetsFile = readAssetsFile("DeviceParameter.json") + deviceParams = gson.fromJson( + assetsFile, object : TypeToken>() {}.type + ) + //动态设置rtspPlayerView宽高 val params = binding.rtspPlayerView.layoutParams as LinearLayout.LayoutParams val videoWidth = getScreenWidth() @@ -27,7 +186,6 @@ params.width = videoWidth params.height = videoHeight.toInt() binding.rtspPlayerView.layoutParams = params - VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, LocaleConstant.SUB_RTSP_URL) } override fun initViewBinding(): ActivityDeviceControlByNativeBinding { diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml new file mode 100644 index 0000000..b7e06e3 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml new file mode 100644 index 0000000..0a64a44 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_direction.xml b/app/src/main/res/drawable/ic_direction.xml new file mode 100644 index 0000000..50711fb --- /dev/null +++ b/app/src/main/res/drawable/ic_direction.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..9fcd974 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_minus.xml b/app/src/main/res/drawable/ic_minus.xml new file mode 100644 index 0000000..2942b80 --- /dev/null +++ b/app/src/main/res/drawable/ic_minus.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/assets/DeviceParameter.json b/app/src/main/assets/DeviceParameter.json new file mode 100644 index 0000000..6ea3c8f --- /dev/null +++ b/app/src/main/assets/DeviceParameter.json @@ -0,0 +1,26 @@ +[ + { + "deviceName": "YTJ010001", + "wifi": "YTJ010001_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.151" + }, + { + "deviceName": "YTJ010002", + "wifi": "YTJ010002_5G", + "pwd": "zhsz20311hw", + "cameraIp": "192.168.10.137" + }, + { + "deviceName": "YTJ010003", + "wifi": "YTJ010003_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.153" + }, + { + "deviceName": "YTJ010004", + "wifi": "YTJ010004_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.154" + } +] \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java new file mode 100644 index 0000000..0398681 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java @@ -0,0 +1,41 @@ +package com.casic.br.operationsite.model; + +public class DeviceParameterModel { + + private String deviceName; + private String wifi; + private String pwd; + private String cameraIp; + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getWifi() { + return wifi; + } + + public void setWifi(String wifi) { + this.wifi = wifi; + } + + public String getPwd() { + return pwd; + } + + public void setPwd(String pwd) { + this.pwd = pwd; + } + + public String getCameraIp() { + return cameraIp; + } + + public void setCameraIp(String cameraIp) { + this.cameraIp = cameraIp; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt index d25400c..4bc90b8 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt @@ -1,25 +1,184 @@ package com.casic.br.operationsite.view +import android.annotation.SuppressLint +import android.content.Context +import android.net.ConnectivityManager +import android.net.Network +import android.net.NetworkCapabilities +import android.net.NetworkRequest +import android.net.wifi.WifiNetworkSpecifier +import android.os.Build import android.os.Bundle +import android.util.Log +import android.view.MotionEvent import android.widget.LinearLayout import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityDeviceControlByNativeBinding import com.casic.br.operationsite.extensions.initImmersionBar -import com.casic.br.operationsite.utils.LocaleConstant +import com.casic.br.operationsite.model.DeviceParameterModel import com.casic.br.operationsite.utils.VideoPlayerManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.readAssetsFile +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class DeviceControlByNativeActivity : KotlinBaseActivity() { - override fun initEvent() { + private val kTag = "DeviceControlByNativeActivity" + private val context = this + private val gson by lazy { Gson() } + private lateinit var deviceParams: List + private var connectivityManager: ConnectivityManager? = null + + @SuppressLint("ClickableViewAccessibility") + override fun initEvent() { + binding.configSelectView.setOnClickListener { + val deviceArray = ArrayList() + deviceParams.forEach { + deviceArray.add(it.deviceName) + } + + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(deviceArray) + .setItemTextColor(R.color.mainThemeColor.convertColor(this)) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + binding.configSelectView.text = deviceArray[position] + + val parameter = deviceParams[position] + + //设置rtsp相机地址 + val rtsp = "rtsp://${parameter.cameraIp}:554/h265/ch1/sub/av_stream" + VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, rtsp) + + //连接WiFi + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val specifier = WifiNetworkSpecifier.Builder() + .setSsid(parameter.wifi) + .setWpa2Passphrase(parameter.pwd) + .build() + + val request = NetworkRequest.Builder() + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .setNetworkSpecifier(specifier) + .build() + + connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) + as ConnectivityManager + connectivityManager?.requestNetwork(request, networkCallback) + } + } + }).build().show() + } + + binding.leftButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.topButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.rightButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.bottomButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.upScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.downScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + } + + private val networkCallback = object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + super.onAvailable(network) + if (connectivityManager?.bindProcessToNetwork(network) == true) { + "设备连接成功".show(context) + } + } + + override fun onUnavailable() { + + } } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) + val assetsFile = readAssetsFile("DeviceParameter.json") + deviceParams = gson.fromJson( + assetsFile, object : TypeToken>() {}.type + ) + //动态设置rtspPlayerView宽高 val params = binding.rtspPlayerView.layoutParams as LinearLayout.LayoutParams val videoWidth = getScreenWidth() @@ -27,7 +186,6 @@ params.width = videoWidth params.height = videoHeight.toInt() binding.rtspPlayerView.layoutParams = params - VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, LocaleConstant.SUB_RTSP_URL) } override fun initViewBinding(): ActivityDeviceControlByNativeBinding { diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml new file mode 100644 index 0000000..b7e06e3 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml new file mode 100644 index 0000000..0a64a44 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_direction.xml b/app/src/main/res/drawable/ic_direction.xml new file mode 100644 index 0000000..50711fb --- /dev/null +++ b/app/src/main/res/drawable/ic_direction.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..9fcd974 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_minus.xml b/app/src/main/res/drawable/ic_minus.xml new file mode 100644 index 0000000..2942b80 --- /dev/null +++ b/app/src/main/res/drawable/ic_minus.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_plus.xml b/app/src/main/res/drawable/ic_plus.xml new file mode 100644 index 0000000..db4941d --- /dev/null +++ b/app/src/main/res/drawable/ic_plus.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/assets/DeviceParameter.json b/app/src/main/assets/DeviceParameter.json new file mode 100644 index 0000000..6ea3c8f --- /dev/null +++ b/app/src/main/assets/DeviceParameter.json @@ -0,0 +1,26 @@ +[ + { + "deviceName": "YTJ010001", + "wifi": "YTJ010001_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.151" + }, + { + "deviceName": "YTJ010002", + "wifi": "YTJ010002_5G", + "pwd": "zhsz20311hw", + "cameraIp": "192.168.10.137" + }, + { + "deviceName": "YTJ010003", + "wifi": "YTJ010003_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.153" + }, + { + "deviceName": "YTJ010004", + "wifi": "YTJ010004_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.154" + } +] \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java new file mode 100644 index 0000000..0398681 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java @@ -0,0 +1,41 @@ +package com.casic.br.operationsite.model; + +public class DeviceParameterModel { + + private String deviceName; + private String wifi; + private String pwd; + private String cameraIp; + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getWifi() { + return wifi; + } + + public void setWifi(String wifi) { + this.wifi = wifi; + } + + public String getPwd() { + return pwd; + } + + public void setPwd(String pwd) { + this.pwd = pwd; + } + + public String getCameraIp() { + return cameraIp; + } + + public void setCameraIp(String cameraIp) { + this.cameraIp = cameraIp; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt index d25400c..4bc90b8 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt @@ -1,25 +1,184 @@ package com.casic.br.operationsite.view +import android.annotation.SuppressLint +import android.content.Context +import android.net.ConnectivityManager +import android.net.Network +import android.net.NetworkCapabilities +import android.net.NetworkRequest +import android.net.wifi.WifiNetworkSpecifier +import android.os.Build import android.os.Bundle +import android.util.Log +import android.view.MotionEvent import android.widget.LinearLayout import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityDeviceControlByNativeBinding import com.casic.br.operationsite.extensions.initImmersionBar -import com.casic.br.operationsite.utils.LocaleConstant +import com.casic.br.operationsite.model.DeviceParameterModel import com.casic.br.operationsite.utils.VideoPlayerManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.readAssetsFile +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class DeviceControlByNativeActivity : KotlinBaseActivity() { - override fun initEvent() { + private val kTag = "DeviceControlByNativeActivity" + private val context = this + private val gson by lazy { Gson() } + private lateinit var deviceParams: List + private var connectivityManager: ConnectivityManager? = null + + @SuppressLint("ClickableViewAccessibility") + override fun initEvent() { + binding.configSelectView.setOnClickListener { + val deviceArray = ArrayList() + deviceParams.forEach { + deviceArray.add(it.deviceName) + } + + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(deviceArray) + .setItemTextColor(R.color.mainThemeColor.convertColor(this)) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + binding.configSelectView.text = deviceArray[position] + + val parameter = deviceParams[position] + + //设置rtsp相机地址 + val rtsp = "rtsp://${parameter.cameraIp}:554/h265/ch1/sub/av_stream" + VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, rtsp) + + //连接WiFi + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val specifier = WifiNetworkSpecifier.Builder() + .setSsid(parameter.wifi) + .setWpa2Passphrase(parameter.pwd) + .build() + + val request = NetworkRequest.Builder() + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .setNetworkSpecifier(specifier) + .build() + + connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) + as ConnectivityManager + connectivityManager?.requestNetwork(request, networkCallback) + } + } + }).build().show() + } + + binding.leftButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.topButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.rightButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.bottomButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.upScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.downScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + } + + private val networkCallback = object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + super.onAvailable(network) + if (connectivityManager?.bindProcessToNetwork(network) == true) { + "设备连接成功".show(context) + } + } + + override fun onUnavailable() { + + } } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) + val assetsFile = readAssetsFile("DeviceParameter.json") + deviceParams = gson.fromJson( + assetsFile, object : TypeToken>() {}.type + ) + //动态设置rtspPlayerView宽高 val params = binding.rtspPlayerView.layoutParams as LinearLayout.LayoutParams val videoWidth = getScreenWidth() @@ -27,7 +186,6 @@ params.width = videoWidth params.height = videoHeight.toInt() binding.rtspPlayerView.layoutParams = params - VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, LocaleConstant.SUB_RTSP_URL) } override fun initViewBinding(): ActivityDeviceControlByNativeBinding { diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml new file mode 100644 index 0000000..b7e06e3 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml new file mode 100644 index 0000000..0a64a44 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_direction.xml b/app/src/main/res/drawable/ic_direction.xml new file mode 100644 index 0000000..50711fb --- /dev/null +++ b/app/src/main/res/drawable/ic_direction.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..9fcd974 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_minus.xml b/app/src/main/res/drawable/ic_minus.xml new file mode 100644 index 0000000..2942b80 --- /dev/null +++ b/app/src/main/res/drawable/ic_minus.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_plus.xml b/app/src/main/res/drawable/ic_plus.xml new file mode 100644 index 0000000..db4941d --- /dev/null +++ b/app/src/main/res/drawable/ic_plus.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_up.xml b/app/src/main/res/drawable/ic_up.xml new file mode 100644 index 0000000..3f4bca9 --- /dev/null +++ b/app/src/main/res/drawable/ic_up.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/assets/DeviceParameter.json b/app/src/main/assets/DeviceParameter.json new file mode 100644 index 0000000..6ea3c8f --- /dev/null +++ b/app/src/main/assets/DeviceParameter.json @@ -0,0 +1,26 @@ +[ + { + "deviceName": "YTJ010001", + "wifi": "YTJ010001_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.151" + }, + { + "deviceName": "YTJ010002", + "wifi": "YTJ010002_5G", + "pwd": "zhsz20311hw", + "cameraIp": "192.168.10.137" + }, + { + "deviceName": "YTJ010003", + "wifi": "YTJ010003_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.153" + }, + { + "deviceName": "YTJ010004", + "wifi": "YTJ010004_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.154" + } +] \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java new file mode 100644 index 0000000..0398681 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java @@ -0,0 +1,41 @@ +package com.casic.br.operationsite.model; + +public class DeviceParameterModel { + + private String deviceName; + private String wifi; + private String pwd; + private String cameraIp; + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getWifi() { + return wifi; + } + + public void setWifi(String wifi) { + this.wifi = wifi; + } + + public String getPwd() { + return pwd; + } + + public void setPwd(String pwd) { + this.pwd = pwd; + } + + public String getCameraIp() { + return cameraIp; + } + + public void setCameraIp(String cameraIp) { + this.cameraIp = cameraIp; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt index d25400c..4bc90b8 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt @@ -1,25 +1,184 @@ package com.casic.br.operationsite.view +import android.annotation.SuppressLint +import android.content.Context +import android.net.ConnectivityManager +import android.net.Network +import android.net.NetworkCapabilities +import android.net.NetworkRequest +import android.net.wifi.WifiNetworkSpecifier +import android.os.Build import android.os.Bundle +import android.util.Log +import android.view.MotionEvent import android.widget.LinearLayout import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityDeviceControlByNativeBinding import com.casic.br.operationsite.extensions.initImmersionBar -import com.casic.br.operationsite.utils.LocaleConstant +import com.casic.br.operationsite.model.DeviceParameterModel import com.casic.br.operationsite.utils.VideoPlayerManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.readAssetsFile +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class DeviceControlByNativeActivity : KotlinBaseActivity() { - override fun initEvent() { + private val kTag = "DeviceControlByNativeActivity" + private val context = this + private val gson by lazy { Gson() } + private lateinit var deviceParams: List + private var connectivityManager: ConnectivityManager? = null + + @SuppressLint("ClickableViewAccessibility") + override fun initEvent() { + binding.configSelectView.setOnClickListener { + val deviceArray = ArrayList() + deviceParams.forEach { + deviceArray.add(it.deviceName) + } + + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(deviceArray) + .setItemTextColor(R.color.mainThemeColor.convertColor(this)) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + binding.configSelectView.text = deviceArray[position] + + val parameter = deviceParams[position] + + //设置rtsp相机地址 + val rtsp = "rtsp://${parameter.cameraIp}:554/h265/ch1/sub/av_stream" + VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, rtsp) + + //连接WiFi + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val specifier = WifiNetworkSpecifier.Builder() + .setSsid(parameter.wifi) + .setWpa2Passphrase(parameter.pwd) + .build() + + val request = NetworkRequest.Builder() + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .setNetworkSpecifier(specifier) + .build() + + connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) + as ConnectivityManager + connectivityManager?.requestNetwork(request, networkCallback) + } + } + }).build().show() + } + + binding.leftButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.topButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.rightButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.bottomButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.upScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.downScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + } + + private val networkCallback = object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + super.onAvailable(network) + if (connectivityManager?.bindProcessToNetwork(network) == true) { + "设备连接成功".show(context) + } + } + + override fun onUnavailable() { + + } } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) + val assetsFile = readAssetsFile("DeviceParameter.json") + deviceParams = gson.fromJson( + assetsFile, object : TypeToken>() {}.type + ) + //动态设置rtspPlayerView宽高 val params = binding.rtspPlayerView.layoutParams as LinearLayout.LayoutParams val videoWidth = getScreenWidth() @@ -27,7 +186,6 @@ params.width = videoWidth params.height = videoHeight.toInt() binding.rtspPlayerView.layoutParams = params - VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, LocaleConstant.SUB_RTSP_URL) } override fun initViewBinding(): ActivityDeviceControlByNativeBinding { diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml new file mode 100644 index 0000000..b7e06e3 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml new file mode 100644 index 0000000..0a64a44 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_direction.xml b/app/src/main/res/drawable/ic_direction.xml new file mode 100644 index 0000000..50711fb --- /dev/null +++ b/app/src/main/res/drawable/ic_direction.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..9fcd974 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_minus.xml b/app/src/main/res/drawable/ic_minus.xml new file mode 100644 index 0000000..2942b80 --- /dev/null +++ b/app/src/main/res/drawable/ic_minus.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_plus.xml b/app/src/main/res/drawable/ic_plus.xml new file mode 100644 index 0000000..db4941d --- /dev/null +++ b/app/src/main/res/drawable/ic_plus.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_up.xml b/app/src/main/res/drawable/ic_up.xml new file mode 100644 index 0000000..3f4bca9 --- /dev/null +++ b/app/src/main/res/drawable/ic_up.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_direction_button.xml b/app/src/main/res/drawable/selector_direction_button.xml new file mode 100644 index 0000000..a1bc9ce --- /dev/null +++ b/app/src/main/res/drawable/selector_direction_button.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/DeviceParameter.json b/app/src/main/assets/DeviceParameter.json new file mode 100644 index 0000000..6ea3c8f --- /dev/null +++ b/app/src/main/assets/DeviceParameter.json @@ -0,0 +1,26 @@ +[ + { + "deviceName": "YTJ010001", + "wifi": "YTJ010001_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.151" + }, + { + "deviceName": "YTJ010002", + "wifi": "YTJ010002_5G", + "pwd": "zhsz20311hw", + "cameraIp": "192.168.10.137" + }, + { + "deviceName": "YTJ010003", + "wifi": "YTJ010003_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.153" + }, + { + "deviceName": "YTJ010004", + "wifi": "YTJ010004_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.154" + } +] \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java new file mode 100644 index 0000000..0398681 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java @@ -0,0 +1,41 @@ +package com.casic.br.operationsite.model; + +public class DeviceParameterModel { + + private String deviceName; + private String wifi; + private String pwd; + private String cameraIp; + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getWifi() { + return wifi; + } + + public void setWifi(String wifi) { + this.wifi = wifi; + } + + public String getPwd() { + return pwd; + } + + public void setPwd(String pwd) { + this.pwd = pwd; + } + + public String getCameraIp() { + return cameraIp; + } + + public void setCameraIp(String cameraIp) { + this.cameraIp = cameraIp; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt index d25400c..4bc90b8 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt @@ -1,25 +1,184 @@ package com.casic.br.operationsite.view +import android.annotation.SuppressLint +import android.content.Context +import android.net.ConnectivityManager +import android.net.Network +import android.net.NetworkCapabilities +import android.net.NetworkRequest +import android.net.wifi.WifiNetworkSpecifier +import android.os.Build import android.os.Bundle +import android.util.Log +import android.view.MotionEvent import android.widget.LinearLayout import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityDeviceControlByNativeBinding import com.casic.br.operationsite.extensions.initImmersionBar -import com.casic.br.operationsite.utils.LocaleConstant +import com.casic.br.operationsite.model.DeviceParameterModel import com.casic.br.operationsite.utils.VideoPlayerManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.readAssetsFile +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class DeviceControlByNativeActivity : KotlinBaseActivity() { - override fun initEvent() { + private val kTag = "DeviceControlByNativeActivity" + private val context = this + private val gson by lazy { Gson() } + private lateinit var deviceParams: List + private var connectivityManager: ConnectivityManager? = null + + @SuppressLint("ClickableViewAccessibility") + override fun initEvent() { + binding.configSelectView.setOnClickListener { + val deviceArray = ArrayList() + deviceParams.forEach { + deviceArray.add(it.deviceName) + } + + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(deviceArray) + .setItemTextColor(R.color.mainThemeColor.convertColor(this)) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + binding.configSelectView.text = deviceArray[position] + + val parameter = deviceParams[position] + + //设置rtsp相机地址 + val rtsp = "rtsp://${parameter.cameraIp}:554/h265/ch1/sub/av_stream" + VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, rtsp) + + //连接WiFi + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val specifier = WifiNetworkSpecifier.Builder() + .setSsid(parameter.wifi) + .setWpa2Passphrase(parameter.pwd) + .build() + + val request = NetworkRequest.Builder() + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .setNetworkSpecifier(specifier) + .build() + + connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) + as ConnectivityManager + connectivityManager?.requestNetwork(request, networkCallback) + } + } + }).build().show() + } + + binding.leftButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.topButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.rightButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.bottomButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.upScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.downScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + } + + private val networkCallback = object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + super.onAvailable(network) + if (connectivityManager?.bindProcessToNetwork(network) == true) { + "设备连接成功".show(context) + } + } + + override fun onUnavailable() { + + } } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) + val assetsFile = readAssetsFile("DeviceParameter.json") + deviceParams = gson.fromJson( + assetsFile, object : TypeToken>() {}.type + ) + //动态设置rtspPlayerView宽高 val params = binding.rtspPlayerView.layoutParams as LinearLayout.LayoutParams val videoWidth = getScreenWidth() @@ -27,7 +186,6 @@ params.width = videoWidth params.height = videoHeight.toInt() binding.rtspPlayerView.layoutParams = params - VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, LocaleConstant.SUB_RTSP_URL) } override fun initViewBinding(): ActivityDeviceControlByNativeBinding { diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml new file mode 100644 index 0000000..b7e06e3 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml new file mode 100644 index 0000000..0a64a44 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_direction.xml b/app/src/main/res/drawable/ic_direction.xml new file mode 100644 index 0000000..50711fb --- /dev/null +++ b/app/src/main/res/drawable/ic_direction.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..9fcd974 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_minus.xml b/app/src/main/res/drawable/ic_minus.xml new file mode 100644 index 0000000..2942b80 --- /dev/null +++ b/app/src/main/res/drawable/ic_minus.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_plus.xml b/app/src/main/res/drawable/ic_plus.xml new file mode 100644 index 0000000..db4941d --- /dev/null +++ b/app/src/main/res/drawable/ic_plus.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_up.xml b/app/src/main/res/drawable/ic_up.xml new file mode 100644 index 0000000..3f4bca9 --- /dev/null +++ b/app/src/main/res/drawable/ic_up.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_direction_button.xml b/app/src/main/res/drawable/selector_direction_button.xml new file mode 100644 index 0000000..a1bc9ce --- /dev/null +++ b/app/src/main/res/drawable/selector_direction_button.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_scale_button.xml b/app/src/main/res/drawable/selector_scale_button.xml new file mode 100644 index 0000000..4efba9d --- /dev/null +++ b/app/src/main/res/drawable/selector_scale_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/DeviceParameter.json b/app/src/main/assets/DeviceParameter.json new file mode 100644 index 0000000..6ea3c8f --- /dev/null +++ b/app/src/main/assets/DeviceParameter.json @@ -0,0 +1,26 @@ +[ + { + "deviceName": "YTJ010001", + "wifi": "YTJ010001_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.151" + }, + { + "deviceName": "YTJ010002", + "wifi": "YTJ010002_5G", + "pwd": "zhsz20311hw", + "cameraIp": "192.168.10.137" + }, + { + "deviceName": "YTJ010003", + "wifi": "YTJ010003_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.153" + }, + { + "deviceName": "YTJ010004", + "wifi": "YTJ010004_5G", + "pwd": "abcd1234", + "cameraIp": "192.168.10.154" + } +] \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java new file mode 100644 index 0000000..0398681 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/DeviceParameterModel.java @@ -0,0 +1,41 @@ +package com.casic.br.operationsite.model; + +public class DeviceParameterModel { + + private String deviceName; + private String wifi; + private String pwd; + private String cameraIp; + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getWifi() { + return wifi; + } + + public void setWifi(String wifi) { + this.wifi = wifi; + } + + public String getPwd() { + return pwd; + } + + public void setPwd(String pwd) { + this.pwd = pwd; + } + + public String getCameraIp() { + return cameraIp; + } + + public void setCameraIp(String cameraIp) { + this.cameraIp = cameraIp; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt index d25400c..4bc90b8 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlByNativeActivity.kt @@ -1,25 +1,184 @@ package com.casic.br.operationsite.view +import android.annotation.SuppressLint +import android.content.Context +import android.net.ConnectivityManager +import android.net.Network +import android.net.NetworkCapabilities +import android.net.NetworkRequest +import android.net.wifi.WifiNetworkSpecifier +import android.os.Build import android.os.Bundle +import android.util.Log +import android.view.MotionEvent import android.widget.LinearLayout import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityDeviceControlByNativeBinding import com.casic.br.operationsite.extensions.initImmersionBar -import com.casic.br.operationsite.utils.LocaleConstant +import com.casic.br.operationsite.model.DeviceParameterModel import com.casic.br.operationsite.utils.VideoPlayerManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.readAssetsFile +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class DeviceControlByNativeActivity : KotlinBaseActivity() { - override fun initEvent() { + private val kTag = "DeviceControlByNativeActivity" + private val context = this + private val gson by lazy { Gson() } + private lateinit var deviceParams: List + private var connectivityManager: ConnectivityManager? = null + + @SuppressLint("ClickableViewAccessibility") + override fun initEvent() { + binding.configSelectView.setOnClickListener { + val deviceArray = ArrayList() + deviceParams.forEach { + deviceArray.add(it.deviceName) + } + + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(deviceArray) + .setItemTextColor(R.color.mainThemeColor.convertColor(this)) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + binding.configSelectView.text = deviceArray[position] + + val parameter = deviceParams[position] + + //设置rtsp相机地址 + val rtsp = "rtsp://${parameter.cameraIp}:554/h265/ch1/sub/av_stream" + VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, rtsp) + + //连接WiFi + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val specifier = WifiNetworkSpecifier.Builder() + .setSsid(parameter.wifi) + .setWpa2Passphrase(parameter.pwd) + .build() + + val request = NetworkRequest.Builder() + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .setNetworkSpecifier(specifier) + .build() + + connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) + as ConnectivityManager + connectivityManager?.requestNetwork(request, networkCallback) + } + } + }).build().show() + } + + binding.leftButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.topButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.rightButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.bottomButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.upScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + + binding.downScaleButton.setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Log.d(kTag, "initEvent: 按下") + } + + MotionEvent.ACTION_UP -> { + Log.d(kTag, "initEvent: 抬起") + } + } + true + } + } + + private val networkCallback = object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + super.onAvailable(network) + if (connectivityManager?.bindProcessToNetwork(network) == true) { + "设备连接成功".show(context) + } + } + + override fun onUnavailable() { + + } } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) + val assetsFile = readAssetsFile("DeviceParameter.json") + deviceParams = gson.fromJson( + assetsFile, object : TypeToken>() {}.type + ) + //动态设置rtspPlayerView宽高 val params = binding.rtspPlayerView.layoutParams as LinearLayout.LayoutParams val videoWidth = getScreenWidth() @@ -27,7 +186,6 @@ params.width = videoWidth params.height = videoHeight.toInt() binding.rtspPlayerView.layoutParams = params - VideoPlayerManager.setGSYVideoPlayerOptions(binding.rtspPlayerView, LocaleConstant.SUB_RTSP_URL) } override fun initViewBinding(): ActivityDeviceControlByNativeBinding { diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml new file mode 100644 index 0000000..b7e06e3 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_blue_10.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml b/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml new file mode 100644 index 0000000..0a64a44 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_dark_blue_10.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_direction.xml b/app/src/main/res/drawable/ic_direction.xml new file mode 100644 index 0000000..50711fb --- /dev/null +++ b/app/src/main/res/drawable/ic_direction.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..9fcd974 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_minus.xml b/app/src/main/res/drawable/ic_minus.xml new file mode 100644 index 0000000..2942b80 --- /dev/null +++ b/app/src/main/res/drawable/ic_minus.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_plus.xml b/app/src/main/res/drawable/ic_plus.xml new file mode 100644 index 0000000..db4941d --- /dev/null +++ b/app/src/main/res/drawable/ic_plus.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_up.xml b/app/src/main/res/drawable/ic_up.xml new file mode 100644 index 0000000..3f4bca9 --- /dev/null +++ b/app/src/main/res/drawable/ic_up.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_direction_button.xml b/app/src/main/res/drawable/selector_direction_button.xml new file mode 100644 index 0000000..a1bc9ce --- /dev/null +++ b/app/src/main/res/drawable/selector_direction_button.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_scale_button.xml b/app/src/main/res/drawable/selector_scale_button.xml new file mode 100644 index 0000000..4efba9d --- /dev/null +++ b/app/src/main/res/drawable/selector_scale_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_control_by_native.xml b/app/src/main/res/layout/activity_device_control_by_native.xml index f7862c3..b1b98af 100644 --- a/app/src/main/res/layout/activity_device_control_by_native.xml +++ b/app/src/main/res/layout/activity_device_control_by_native.xml @@ -30,6 +30,134 @@ android:layout_width="match_parent" android:layout_height="220dp" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file