Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
p x
SuZhouAvp
Commits
9aff9409
Commit
9aff9409
authored
Jun 19, 2025
by
p x
Browse files
2
parent
827d0a40
Changes
18
Hide whitespace changes
Inline
Side-by-side
app/src/main/assets/mock/park.txt
0 → 100644
View file @
9aff9409
{"callOrBackPoint":"125.1424934543.83896992","centrePoint":"125.14337396,43.83873198","extendPoint":"125.14333880,43.83866747","parkingSpace":"1D-001"}
app/src/main/java/com/sd/cavphmi/bean/CarVehicle.kt
View file @
9aff9409
package
com.sd.cavphmi.bean
package
com.sd.cavphmi.bean
/***车辆位资数据**/
/***车辆位资数据
*{"vehicleData":[{"altitude":0.00,"brake":30,"gasPedal":20,"gear":2,"heading":208.61645962016533,"latitude":43.83869937,"longitude":125.14344480,"obuCode":"O-HK-2687","reportTime":1750300843548,"speed":0.00,"vehicleId":"1694264612474306561","vehiclePlate":"吉AC242","vehiclePurpose":"avp","vehiclePurposeName":"AVP车辆","wheelAngle":-375}],"wsTime":1750300843548}
* **/
data class
CarVehicle
(
data class
CarVehicle
(
val
vehicleData
:
List
<
CarVehicleData
>,
val
vehicleData
:
List
<
CarVehicleData
>,
val
wsTime
:
Long
val
wsTime
:
Long
...
...
app/src/main/java/com/sd/cavphmi/bean/LinePlaningBean.kt
0 → 100644
View file @
9aff9409
package
com.sd.cavphmi.bean
/**全局路径发生切换***/
class
LinePlaningBean
{
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/bean/ParkBean.kt
0 → 100644
View file @
9aff9409
package
com.sd.cavphmi.bean
/***定车位变更
* {"centrePoint":"125.14337396,43.83873198","extendPoint":"125.14333880,43.83866747","callOrBackPoint":"125.1424934543.83896992","parkingSpace":"1D-001"}
* */
data class
ParkBean
(
val
callOrBackPoint
:
String
,
val
centrePoint
:
String
,
val
extendPoint
:
String
,
val
parkingSpace
:
String
)
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/bean/ParkLinePlan.kt
0 → 100644
View file @
9aff9409
package
com.sd.cavphmi.bean
/**开始泊车,获取路径规划
* {"vehicleId":"1700381241280815105","vehicleInfoId":"1694264612474306561","vehiclePlate":"吉AC242","taskId":"1935514619273338882","linkingLine":"118_0.00_-1","line":[[125.14350411033233,43.83873919249159],[125.14340202112747,43.83869489740147]],"spaceCode":null}
* **/
data class
ParkLinePlan
(
val
line
:
List
<
List
<
Double
>>,
val
linkingLine
:
String
,
val
spaceCode
:
Any
,
val
taskId
:
String
,
val
vehicleId
:
String
,
val
vehicleInfoId
:
String
,
val
vehiclePlate
:
String
)
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/bean/PartLineBean.kt
0 → 100644
View file @
9aff9409
package
com.sd.cavphmi.bean
/**局部路径***/
class
PartLineBean
{
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/bean/RsiEventBean.kt
0 → 100644
View file @
9aff9409
package
com.sd.cavphmi.bean
/***rsi事件**/
class
RsiEventBean
{
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/bean/WebSetBean.kt
View file @
9aff9409
...
@@ -12,6 +12,9 @@ object WebSetBean {
...
@@ -12,6 +12,9 @@ object WebSetBean {
"/topic/vehicleStatus"
to
"/avp/api/VL961/vehicleStatus"
,
"/topic/vehicleStatus"
to
"/avp/api/VL961/vehicleStatus"
,
"/topic/timeDelay"
to
"/avp/api/VL961/timeDelay"
,
"/topic/timeDelay"
to
"/avp/api/VL961/timeDelay"
,
"/topic/points"
to
"/avp/api/VL961/points"
,
//停车位变更
"/topic/points"
to
"/avp/api/VL961/points"
,
//停车位变更
"/topic/linePlaning"
to
"/avp/api/VL961/linePlaning"
,
//全局路径发生切换
"/topic/partLine"
to
"/avp/api/VL961/partLine"
,
// // 局部路径
"/topic/rsiEvent"
to
"/avp/api/VL961/rsiEvent"
,
// rsi事件
)
)
var
dic
=
mapOf
(
var
dic
=
mapOf
(
...
@@ -23,6 +26,9 @@ object WebSetBean {
...
@@ -23,6 +26,9 @@ object WebSetBean {
5236
to
"/topic/vehicleStatus"
,
5236
to
"/topic/vehicleStatus"
,
5237
to
"/topic/timeDelay"
,
5237
to
"/topic/timeDelay"
,
1
to
"/topic/point"
,
1
to
"/topic/point"
,
52310
to
"/topic/linePlaning"
,
52311
to
"/topic/rsiEvent"
,
52312
to
"/topic/partLine"
,
)
)
...
...
app/src/main/java/com/sd/cavphmi/bindadapters/ShowCarStatuObject.kt
View file @
9aff9409
...
@@ -94,35 +94,35 @@ object ShowCarStatuObject {
...
@@ -94,35 +94,35 @@ object ShowCarStatuObject {
}
}
in
1
..
45
->
{
in
1
..
45
->
{
tv
.
setText
(
"北偏东"
)
tv
.
setText
(
"北偏东
${heading}°
"
)
}
}
in
46
..
89
->
{
in
46
..
89
->
{
tv
.
setText
(
"东偏北"
)
tv
.
setText
(
"东偏北
${90-heading}°
"
)
}
}
in
91
..
135
->
{
in
91
..
135
->
{
tv
.
setText
(
"东偏南"
)
tv
.
setText
(
"东偏南
${heading-90}°
"
)
}
}
in
136
..
179
->
{
in
136
..
179
->
{
tv
.
setText
(
"南偏东"
)
tv
.
setText
(
"南偏东
${180 - heading}°
"
)
}
}
in
181
..
225
->
{
in
181
..
225
->
{
tv
.
setText
(
"南偏西"
)
tv
.
setText
(
"南偏西
${heading - 180}°
"
)
}
}
in
226
..
269
->
{
in
226
..
269
->
{
tv
.
setText
(
"西偏南"
)
tv
.
setText
(
"西偏南
${270 - heading}°
"
)
}
}
in
271
..
315
->
{
in
271
..
315
->
{
tv
.
setText
(
"西偏北"
)
tv
.
setText
(
"西偏北
${heading - 270}°
"
)
}
}
in
316
..
359
->
{
in
316
..
359
->
{
tv
.
setText
(
"北偏西"
)
tv
.
setText
(
"北偏西
${360 - heading}°
"
)
}
}
else
->
{
else
->
{
...
...
app/src/main/java/com/sd/cavphmi/bindadapters/ShowOrderObject.kt
View file @
9aff9409
package
com.sd.cavphmi.bindadapters
package
com.sd.cavphmi.bindadapters
import
android.graphics.Color
import
android.text.Spannable
import
android.text.Spannable
import
android.text.SpannableStringBuilder
import
android.text.SpannableStringBuilder
import
android.text.style.ForegroundColorSpan
import
android.text.style.ForegroundColorSpan
import
android.text.style.RelativeSizeSpan
import
android.view.View
import
android.view.View
import
android.widget.LinearLayout
import
android.widget.LinearLayout
import
android.widget.TextView
import
android.widget.TextView
import
androidx.core.text.set
import
androidx.databinding.BindingAdapter
import
androidx.core.graphics.toColorInt
import
androidx.core.graphics.toColorInt
import
androidx.databinding.BindingAdapter
object
ShowOrderObject
{
object
ShowOrderObject
{
...
...
app/src/main/java/com/sd/cavphmi/net/httpmothod/ClientRetrofitMethod.kt
View file @
9aff9409
package
com.sd.cavphmi.net.httpmothod
package
com.sd.cavphmi.net.httpmothod
import
com.sd.cavphmi.bean.ParkLinePlan
import
com.sd.cavphmi.bean.OrderBean
import
com.sd.cavphmi.bean.OrderBean
import
com.sd.cavphmi.bean.SpaceNoBean
import
com.sd.cavphmi.bean.SpaceNoBean
import
com.sd.cavphmi.net.MyBaseResource
import
com.sd.cavphmi.net.MyBaseResource
import
io.reactivex.rxjava3.core.Observable
import
okhttp3.RequestBody
import
okhttp3.RequestBody
import
retrofit2.http.Body
import
retrofit2.http.Body
import
retrofit2.http.POST
import
retrofit2.http.POST
...
@@ -18,9 +18,7 @@ interface ClientRetrofitMethod {
...
@@ -18,9 +18,7 @@ interface ClientRetrofitMethod {
// @GET("http://59.175.163.12/serv-addr/server.json")
// @GET("http://59.175.163.12/serv-addr/server.json")
// fun getConfigurations(): Observable<List<ConfigurationBean>>
// fun getConfigurations(): Observable<List<ConfigurationBean>>
//
//
/**排序字段sortBy
/***查询车位信息***/
排序方向order
*/
@POST
(
"hkapi/pms/v1/parkingSpace/spaceNo"
)
@POST
(
"hkapi/pms/v1/parkingSpace/spaceNo"
)
suspend
fun
getSpaceData
(
@Body
body
:
RequestBody
):
MyBaseResource
<
SpaceNoBean
>
suspend
fun
getSpaceData
(
@Body
body
:
RequestBody
):
MyBaseResource
<
SpaceNoBean
>
...
@@ -32,6 +30,10 @@ interface ClientRetrofitMethod {
...
@@ -32,6 +30,10 @@ interface ClientRetrofitMethod {
@POST
(
"avp/siteLine/getNetworkQuality"
)
@POST
(
"avp/siteLine/getNetworkQuality"
)
suspend
fun
getTimeOut
():
Any
suspend
fun
getTimeOut
():
Any
/***获取路径规划**/
@POST
(
"avp/linePlaning/get"
)
suspend
fun
getLinePlaning
(
@Body
body
:
RequestBody
):
ParkLinePlan
/**
/**
* 话题根据评论ID查询所有回复
* 话题根据评论ID查询所有回复
...
...
app/src/main/java/com/sd/cavphmi/repositorys/ParseSocketRepo.kt
View file @
9aff9409
package
com.sd.cavphmi.repositorys
package
com.sd.cavphmi.repositorys
import
com.google.gson.Gson
import
com.google.gson.Gson
import
com.sd.cavphmi.bean.ParkLinePlan
import
com.sd.cavphmi.bean.OrderBean
import
com.sd.cavphmi.bean.OrderBean
import
com.sd.cavphmi.bean.SpaceNoBean
import
com.sd.cavphmi.net.MyResult
import
com.sd.cavphmi.net.MyResult
import
com.sd.cavphmi.net.RequestBodyUtil
import
com.sd.cavphmi.net.RequestBodyUtil
import
com.sd.cavphmi.net.httpmothod.ClientRetrofitMethod
import
com.sd.cavphmi.net.httpmothod.ClientRetrofitMethod
import
com.sd.cavphmi.utils.MyContants
import
com.sd.cavphmi.utils.MyContants
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.withContext
import
kotlinx.coroutines.withContext
import
retrofit2.HttpException
import
retrofit2.HttpException
import
java.io.EOFException
import
java.util.concurrent.atomic.AtomicBoolean
import
javax.inject.Inject
import
javax.inject.Inject
class
ParseSocketRepo
@Inject
constructor
(
private
val
clientRetrofitMethod
:
ClientRetrofitMethod
)
{
class
ParseSocketRepo
@Inject
constructor
(
private
val
clientRetrofitMethod
:
ClientRetrofitMethod
)
{
...
@@ -27,9 +26,12 @@ class ParseSocketRepo @Inject constructor(private val clientRetrofitMethod: Clie
...
@@ -27,9 +26,12 @@ class ParseSocketRepo @Inject constructor(private val clientRetrofitMethod: Clie
}
}
}
}
suspend
fun
getOrderData
(
carPlate
:
String
):
MyResult
<
OrderBean
>
{
/***订单信息**/
suspend
fun
getOrderData
(
carPlate
:
String
?):
MyResult
<
OrderBean
>
{
if
(
carPlate
.
isNullOrEmpty
())
{
return
MyResult
.
Error
(
MyContants
.
HTTP_ERROR
,
"error"
)
}
// if (!orderCalled.getAndSet(true)) {
// if (!orderCalled.getAndSet(true)) {
delay
(
5000
)
var
map
=
mapOf
(
"vehiclePlate"
to
carPlate
)
var
map
=
mapOf
(
"vehiclePlate"
to
carPlate
)
var
body
=
RequestBodyUtil
.
toRequestBody
(
map
)
var
body
=
RequestBodyUtil
.
toRequestBody
(
map
)
try
{
try
{
...
@@ -39,14 +41,14 @@ class ParseSocketRepo @Inject constructor(private val clientRetrofitMethod: Clie
...
@@ -39,14 +41,14 @@ class ParseSocketRepo @Inject constructor(private val clientRetrofitMethod: Clie
// println("e.message = ${e.message}")
// println("e.message = ${e.message}")
return
MyResult
.
Error
(
e
.
code
(),
e
.
message
()
?:
"error"
)
return
MyResult
.
Error
(
e
.
code
(),
e
.
message
()
?:
"error"
)
}
catch
(
e
:
Exception
)
{
}
catch
(
e
:
Exception
)
{
return
MyResult
.
Error
(
500
,
e
.
message
?:
"error"
)
return
MyResult
.
Error
(
MyContants
.
HTTP_ERROR
,
e
.
message
?:
"error"
)
}
}
// } else {
// } else {
// return MyResult.Error(MyContants.ALREADT_ONCE, "")
// return MyResult.Error(MyContants.ALREADT_ONCE, "")
// }
// }
}
}
/**测试网络超时***/
suspend
fun
getTimeOut
():
MyResult
<
Int
>
{
suspend
fun
getTimeOut
():
MyResult
<
Int
>
{
try
{
try
{
var
star
=
System
.
currentTimeMillis
()
var
star
=
System
.
currentTimeMillis
()
...
@@ -56,7 +58,37 @@ class ParseSocketRepo @Inject constructor(private val clientRetrofitMethod: Clie
...
@@ -56,7 +58,37 @@ class ParseSocketRepo @Inject constructor(private val clientRetrofitMethod: Clie
}
catch
(
e
:
HttpException
)
{
}
catch
(
e
:
HttpException
)
{
return
MyResult
.
Error
(
e
.
code
(),
e
.
message
()
?:
"error"
)
return
MyResult
.
Error
(
e
.
code
(),
e
.
message
()
?:
"error"
)
}
catch
(
e
:
Exception
)
{
}
catch
(
e
:
Exception
)
{
return
MyResult
.
Error
(
500
,
e
.
message
?:
"error"
)
return
MyResult
.
Error
(
MyContants
.
HTTP_ERROR
,
e
.
message
?:
"error"
)
}
}
/***查询车位信息***/
suspend
fun
getSpaceData
():
MyResult
<
SpaceNoBean
>
{
var
map
=
mutableMapOf
(
"pageNo"
to
20
,
"pageSize"
to
1000
)
var
body
=
RequestBodyUtil
.
toRequestBody
(
map
)
try
{
var
bean
=
clientRetrofitMethod
.
getSpaceData
(
body
)
return
MyResult
.
Success
(
bean
.
data
)
}
catch
(
e
:
HttpException
)
{
// println("e.message = ${e.message}")
return
MyResult
.
Error
(
e
.
code
(),
e
.
message
()
?:
"error"
)
}
catch
(
e
:
Exception
)
{
return
MyResult
.
Error
(
MyContants
.
HTTP_ERROR
,
e
.
message
?:
"error"
)
}
}
/***获取路径规划***/
suspend
fun
getLinePlaning
(
vehiclePlate
:
String
):
MyResult
<
ParkLinePlan
>
{
var
map
=
mutableMapOf
(
"vehiclePlate"
to
vehiclePlate
)
var
body
=
RequestBodyUtil
.
toRequestBody
(
map
)
try
{
var
bean
=
clientRetrofitMethod
.
getLinePlaning
(
body
)
return
MyResult
.
Success
(
bean
)
}
catch
(
e
:
HttpException
)
{
println
(
"e.message = ${e.message}"
)
return
MyResult
.
Error
(
e
.
code
(),
e
.
message
()
?:
"error"
)
}
catch
(
e
:
Exception
)
{
return
MyResult
.
Error
(
MyContants
.
HTTP_ERROR
,
e
.
message
?:
"error"
)
}
}
}
}
...
...
app/src/main/java/com/sd/cavphmi/repositorys/SpaceNoRepo.kt
View file @
9aff9409
...
@@ -26,15 +26,5 @@ class SpaceNoRepo @Inject constructor(var clientRetrofitMethod: ClientRetrofitMe
...
@@ -26,15 +26,5 @@ class SpaceNoRepo @Inject constructor(var clientRetrofitMethod: ClientRetrofitMe
suspend
fun
getSpaceData
():
MyResult
<
SpaceNoBean
>
{
var
map
=
mutableMapOf
(
"pageNo"
to
20
,
"pageSize"
to
1000
)
var
body
=
RequestBodyUtil
.
toRequestBody
(
map
)
try
{
var
bean
=
clientRetrofitMethod
.
getSpaceData
(
body
)
return
MyResult
.
Success
(
bean
.
data
)
}
catch
(
e
:
HttpException
)
{
println
(
"e.message = ${e.message}"
)
return
MyResult
.
Error
(
e
.
code
(),
e
.
message
()
?:
"error"
)
}
}
}
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/ui/MainActivity.kt
View file @
9aff9409
...
@@ -7,6 +7,7 @@ import com.sd.cavphmi.BR
...
@@ -7,6 +7,7 @@ import com.sd.cavphmi.BR
import
com.sd.cavphmi.R
import
com.sd.cavphmi.R
import
com.sd.cavphmi.base.BaseActivity
import
com.sd.cavphmi.base.BaseActivity
import
com.sd.cavphmi.bean.CarVehicle
import
com.sd.cavphmi.bean.CarVehicle
import
com.sd.cavphmi.bean.ParkBean
import
com.sd.cavphmi.bean.VehicleStats
import
com.sd.cavphmi.bean.VehicleStats
import
com.sd.cavphmi.databinding.ActivityMainBinding
import
com.sd.cavphmi.databinding.ActivityMainBinding
import
com.sd.cavphmi.intfaces.OnConCan
import
com.sd.cavphmi.intfaces.OnConCan
...
@@ -46,14 +47,35 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() {
...
@@ -46,14 +47,35 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() {
viewModel
.
startWS
()
viewModel
.
startWS
()
viewModel
.
getCurrentTime
()
viewModel
.
getCurrentTime
()
viewModel
.
getMobileNetworkSignal
()
viewModel
.
getMobileNetworkSignal
()
viewModel
.
getOrderData
()
viewModel
.
getSpaceData
()
//test
// viewModel.findPathPlanning()
}
}
override
fun
initListener
()
{
override
fun
initListener
()
{
mockBt
()
mockLis
()
//订单数据
viewModel
.
orderBean
.
observe
(
this
)
{
binding
.
order
=
it
}
}
private
fun
mockLis
()
{
mockVM
.
orderBean
.
observe
(
this
)
{
binding
.
order
=
it
}
}
private
fun
mockBt
()
{
binding
.
btVehicle
.
setOnClickListener
{
binding
.
btVehicle
.
setOnClickListener
{
viewModel
.
subVehicle
().
observe
(
this
)
{
viewModel
.
subVehicle
().
observe
(
this
)
{
topicVehicle
(
it
)
topicVehicle
(
it
)
}
}
// mockVM.onVehicleMock()
}
}
binding
.
btStatus
.
setOnClickListener
{
binding
.
btStatus
.
setOnClickListener
{
viewModel
.
subVehicleStatus
().
observe
(
this
)
{
viewModel
.
subVehicleStatus
().
observe
(
this
)
{
...
@@ -71,37 +93,56 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() {
...
@@ -71,37 +93,56 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() {
viewModel
.
subEndV2x
()
viewModel
.
subEndV2x
()
}
}
binding
.
btChewei
.
setOnClickListener
{
binding
.
btChewei
.
setOnClickListener
{
viewModel
.
subPoints
()
viewModel
.
subPoints
().
observe
(
this
){
topicvPoints
(
it
)
}
}
}
//订单数据
binding
.
btAllline
.
setOnClickListener
{
viewModel
.
orderBean
.
observe
(
this
)
{
viewModel
.
subLinePlaning
()
binding
.
order
=
it
}
}
mockVM
.
orderBean
.
observe
(
this
)
{
binding
.
btJubuline
.
setOnClickListener
{
binding
.
order
=
it
viewModel
.
subPartLine
()
}
binding
.
btRsi
.
setOnClickListener
{
viewModel
.
subRsiEvent
()
}
}
}
}
/**车辆姿态**/
/**车辆姿态**/
private
fun
topicVehicle
(
bean
:
CarVehicle
)
{
private
fun
topicVehicle
(
bean
:
CarVehicle
)
{
if
(
bean
.
vehicleData
?.
isNotEmpty
()
?:
false
)
{
viewModel
.
heading
.
set
(
bean
.
vehicleData
.
get
(
0
).
heading
.
toInt
())
viewModel
.
speed
.
set
(
bean
.
vehicleData
.
get
(
0
).
speed
)
}
}
}
/**联网车辆状态数据
topic
**/
/**联网车辆状态数据**/
private
fun
topicVehicleStatus
(
bean
:
VehicleStats
)
{
private
fun
topicVehicleStatus
(
bean
:
VehicleStats
)
{
if
(
bean
.
vehicleData
?.
isNotEmpty
()
?:
false
)
{
if
((
bean
.
vehicleData
.
count
())
>
0
)
{
var
driveMode
=
bean
.
vehicleData
.
get
(
0
).
driveMode
var
str
=
when
(
driveMode
)
{
}
0
->
"自动驾驶"
}
1
->
"人工驾驶"
/**停车位变更**/
2
->
"远程驾驶"
private
fun
topicvPoints
(
bean
:
ParkBean
)
{
else
->
"—— ——"
var
curValue
=
bean
.
parkingSpace
}
//
viewModel
.
driveMode
.
set
(
str
)
if
(
viewModel
.
spaceCode
.
isNotEmpty
())
{
// // 更新停车位的信息
var
parkingSpot
=
viewModel
.
getParkingSpot
(
curValue
)
// this.$refs.basisCesium.updateParkingSpace(parkingSpot);
}
else
{
// // 第一次需要添加停车位的效果
// let carPostion = [baseData.mainLocation.lon, baseData.mainLocation.lat];
// // 开启前进自主泊车效果
// let parkingSpot = this.getParkingSpot(curValue);
// this.$refs.basisCesium.addForwardParkingEffect({
// id: baseData.mainCarID,
// carPostion: carPostion,
// spaceInfo: parkingSpot,
// });
}
}
//
// // 记录 spaceCode 给倒车入库的时候用
viewModel
.
spaceCode
=
curValue
//
// this.highlightSpaceEntity(spaceCode)
}
}
...
...
app/src/main/java/com/sd/cavphmi/utils/MyContants.kt
View file @
9aff9409
...
@@ -14,4 +14,6 @@ object MyContants {
...
@@ -14,4 +14,6 @@ object MyContants {
/***已经**/
/***已经**/
const
val
ALREADT_ONCE
=
-
1
const
val
ALREADT_ONCE
=
-
1
const
val
HTTP_ERROR
=
500
}
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/viewmodels/MainVm.kt
View file @
9aff9409
package
com.sd.cavphmi.viewmodels
package
com.sd.cavphmi.viewmodels
import
android.content.Context
import
android.content.Context
import
android.telephony.PhoneStateListener
import
android.text.TextUtils
import
android.telephony.SignalStrength
import
android.telephony.TelephonyCallback
import
android.telephony.TelephonyManager
import
androidx.databinding.ObservableField
import
androidx.databinding.ObservableField
import
androidx.lifecycle.LiveData
import
androidx.lifecycle.LiveData
import
androidx.lifecycle.MutableLiveData
import
androidx.lifecycle.MutableLiveData
...
@@ -12,9 +9,14 @@ import androidx.lifecycle.viewModelScope
...
@@ -12,9 +9,14 @@ import androidx.lifecycle.viewModelScope
import
com.google.gson.Gson
import
com.google.gson.Gson
import
com.sd.cavphmi.base.MyBaseViewModel
import
com.sd.cavphmi.base.MyBaseViewModel
import
com.sd.cavphmi.bean.CarVehicle
import
com.sd.cavphmi.bean.CarVehicle
import
com.sd.cavphmi.bean.LinePlaningBean
import
com.sd.cavphmi.bean.OrderBean
import
com.sd.cavphmi.bean.OrderBean
import
com.sd.cavphmi.bean.ParkBean
import
com.sd.cavphmi.bean.PartLineBean
import
com.sd.cavphmi.bean.PerTarget
import
com.sd.cavphmi.bean.PerTarget
import
com.sd.cavphmi.bean.ReqBean
import
com.sd.cavphmi.bean.ReqBean
import
com.sd.cavphmi.bean.RsiEventBean
import
com.sd.cavphmi.bean.SpaceNoBean
import
com.sd.cavphmi.bean.VToXImgBean
import
com.sd.cavphmi.bean.VToXImgBean
import
com.sd.cavphmi.bean.VehicleStats
import
com.sd.cavphmi.bean.VehicleStats
import
com.sd.cavphmi.bean.WebSetBean
import
com.sd.cavphmi.bean.WebSetBean
...
@@ -23,12 +25,13 @@ import com.sd.cavphmi.repositorys.ParseSocketRepo
...
@@ -23,12 +25,13 @@ import com.sd.cavphmi.repositorys.ParseSocketRepo
import
com.sd.cavphmi.utils.DateUtils
import
com.sd.cavphmi.utils.DateUtils
import
com.sd.cavphmi.utils.FileIoUtils
import
com.sd.cavphmi.utils.FileIoUtils
import
com.sd.cavphmi.utils.MyContants
import
com.sd.cavphmi.utils.MyContants
import
com.sd.cavphmi.utils.SystemUtils
import
com.sd.cavphmi.utils.ToastHelper
import
com.sd.cavphmi.utils.ToastHelper
import
com.sd.cavphmi.websockets.MyWebSocketClient
import
com.sd.cavphmi.websockets.MyWebSocketClient
import
dagger.hilt.android.lifecycle.HiltViewModel
import
dagger.hilt.android.lifecycle.HiltViewModel
import
dagger.hilt.android.qualifiers.ApplicationContext
import
dagger.hilt.android.qualifiers.ApplicationContext
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.launch
import
kotlinx.coroutines.launch
import
kotlinx.coroutines.withContext
import
org.java_websocket.handshake.ServerHandshake
import
org.java_websocket.handshake.ServerHandshake
import
protocol.Response
import
protocol.Response
import
java.net.URI
import
java.net.URI
...
@@ -58,9 +61,21 @@ class MainVm @Inject constructor(
...
@@ -58,9 +61,21 @@ class MainVm @Inject constructor(
//感知目标物
//感知目标物
var
targetPre
=
MutableLiveData
<
PerTarget
>()
var
targetPre
=
MutableLiveData
<
PerTarget
>()
//停车位变更
var
parkBean
=
MutableLiveData
<
ParkBean
>()
//停车位编码
var
spaceCode
=
""
//订单信息
//订单信息
var
orderBean
=
MutableLiveData
<
OrderBean
>()
var
orderBean
=
MutableLiveData
<
OrderBean
>()
//老停车状态,用于判断状态切换
private
var
oldAvpStatus
=
-
1
// 是否处理路径规划显示的路径
private
var
needDealPath
=
false
//驾驶模式
//驾驶模式
var
driveMode
=
ObservableField
(
""
)
var
driveMode
=
ObservableField
(
""
)
...
@@ -76,12 +91,19 @@ class MainVm @Inject constructor(
...
@@ -76,12 +91,19 @@ class MainVm @Inject constructor(
//网络延时时间差
//网络延时时间差
var
timeOutDiff
=
ObservableField
(-
1
)
var
timeOutDiff
=
ObservableField
(-
1
)
//
Timer 可用于执行延迟任务或循环任务
//
当前时间
private
var
curTimer
=
Timer
()
private
var
curTimer
=
Timer
()
//
Timer 可用于执行延迟任务或循环任务
//
信号强度
private
var
netSingTimer
=
Timer
()
private
var
netSingTimer
=
Timer
()
// 订单详情
private
var
orderTimer
=
Timer
()
// 车位信息
private
var
carSpaNoTimer
=
Timer
()
/***获取当前时间**/
/***获取当前时间**/
fun
getCurrentTime
()
{
fun
getCurrentTime
()
{
curTimer
.
schedule
(
object
:
TimerTask
()
{
curTimer
.
schedule
(
object
:
TimerTask
()
{
...
@@ -92,6 +114,153 @@ class MainVm @Inject constructor(
...
@@ -92,6 +114,153 @@ class MainVm @Inject constructor(
},
2000
,
1000
*
60
)
},
2000
,
1000
*
60
)
}
}
/***获取订单信息
* @param vehiclePlate 车牌号
* **/
fun
getOrderData
()
{
orderTimer
.
schedule
(
object
:
TimerTask
()
{
override
fun
run
()
{
var
vehiclePlate
=
carVehicle
.
value
?.
vehicleData
?.
get
(
0
)
?.
vehiclePlate
?:
""
if
(
TextUtils
.
isEmpty
(
vehiclePlate
))
{
return
}
viewModelScope
.
launch
{
var
result
=
parseSocketRepo
.
getOrderData
(
vehiclePlate
)
when
(
result
)
{
is
MyResult
.
Success
<
OrderBean
>
->
{
println
(
"-------订单信息---- = ${result.data}"
)
orderBean
.
value
=
result
.
data
var
avpStatus
=
result
.
data
.
avpStatus
var
plateNo
=
result
.
data
.
plateNo
if
(
oldAvpStatus
!=
avpStatus
)
{
if
(
avpStatus
!=
3
&&
oldAvpStatus
==
3
)
{
// endParkingVehicle() // 结束泊车
}
else
if
(
avpStatus
==
3
)
{
startParkingVehicle
(
plateNo
)
// 开始泊车
}
if
(
avpStatus
!=
5
&&
oldAvpStatus
==
5
)
{
// 由招车转为其他状态
endRecruitmentVehicle
()
}
else
if
(
avpStatus
==
5
)
{
// 招车需要显示路径
startRecruitmentVehicle
(
plateNo
)
}
oldAvpStatus
=
avpStatus
}
}
is
MyResult
.
Error
->
{
println
(
"-------订单信息 ERROR---- = ${result}"
)
}
}
// FileIoUtils.writeToFile(gson.toJson(bean), "carvehicle.txt")
}
}
},
3000
,
1000
*
10
)
}
/**开始泊车*/
private
fun
startParkingVehicle
(
plateNo
:
String
)
{
// worker中处理路径规划显示的路径
needDealPath
=
true
// 获取规划好的路径
findPathPlanning
(
plateNo
)
}
/**
* 结束泊车
*/
private
fun
endParkingVehicle
()
{
// 移除自主泊车所有效果
// this.$refs.basisCesium.removeParkingEffect();
//
// // 停车位信息重置
// spaceCode = "";
// this.highlightSpaceEntity(spaceCode)
//
// // 是否处理路径规划显示的路径
// this.needDealPath = false;
//
// // 小地图上不显示线
// cesiumMainIns.updateLinePosition2D(polyine2d, {
// before: [],
// after: [],
// left: [],
// right: []
// });
// console.log('window.leftPath', window.leftPath)
}
/*** 开始招车,显示路径规划路径*/
private
fun
startRecruitmentVehicle
(
vehiclePlate
:
String
)
{
// worker不处理路径规划显示的路径
this
.
needDealPath
=
true
// 获取规划好的路径
findPathPlanning
(
vehiclePlate
,
false
)
// 开始招车的时候就开始记录了
// window.needRecord = true;
// window.recordData = {
// vehicle: [],
// vehicleStatus: [],
// dataMerge: [],
// v2xStart: [],
// v2xEnd: [],
// points: [],
// linePlaning: [],
// linePlaningHttp: [],
// partLine: [],
// rsiEvent: [],
// }
}
/** 由招车转为其他状态,移除路径规划路线*/
private
fun
endRecruitmentVehicle
()
{
// worker中不处理路径规划显示的路径
this
.
needDealPath
=
false
;
//
// // 移除路面上的路线
// this.$refs.basisCesium.removePathPlanLine();
//
// // 小地图上不显示线
// cesiumMainIns.updateLinePosition2D(polyine2d, {
// before: [],
// after: [],
// left: [],
// right: []
// });
}
/**
* 获取路径规划
*/
fun
findPathPlanning
(
vehiclePlate
:
String
=
"吉AC242"
,
ifParking
:
Boolean
=
true
)
{
viewModelScope
.
launch
{
var
result
=
parseSocketRepo
.
getLinePlaning
(
vehiclePlate
)
when
(
result
)
{
is
MyResult
.
Success
->
{
var
lins
=
result
.
data
.
line
if
(
lins
.
isNotEmpty
())
{
// this.$refs.basisCesium.findPathPlanning(res);
// // 泊车需要高亮车位,召车不高亮
if
(
ifParking
)
{
// spaceCode = res.spaceCode
}
else
{
// spaceCode = ''
}
// this.highlightSpaceEntity(spaceCode)
}
}
else
->
{
println
(
"-----获取路径规划 = ${result}"
)
}
}
}
}
/***获取信号强度**/
/***获取信号强度**/
fun
getMobileNetworkSignal
()
{
fun
getMobileNetworkSignal
()
{
netSingTimer
.
schedule
(
object
:
TimerTask
()
{
netSingTimer
.
schedule
(
object
:
TimerTask
()
{
...
@@ -113,6 +282,45 @@ class MainVm @Inject constructor(
...
@@ -113,6 +282,45 @@ class MainVm @Inject constructor(
},
5000
,
1000
*
60
)
},
5000
,
1000
*
60
)
}
}
/**查询车位信息**/
fun
getSpaceData
()
{
carSpaNoTimer
.
schedule
(
object
:
TimerTask
()
{
override
fun
run
()
{
viewModelScope
.
launch
{
var
result
=
parseSocketRepo
.
getSpaceData
()
when
(
result
)
{
is
MyResult
.
Success
<
SpaceNoBean
>
->
{
println
(
"-------------查询车位信息= ${result}"
)
FileIoUtils
.
writeToFile
(
gson
.
toJson
(
result
.
data
),
"spaceno.txt"
)
}
is
MyResult
.
Error
->
{
println
(
"-------------查询车位信息 Error= ${result}"
)
// carSpaNoTimer.cancel()
}
}
}
}
},
4000
,
1000
*
20
)
}
/**
* 根据停车位编号,获取停车位的具体信息
* @param {*} parkingValue
*/
fun
getParkingSpot
(
parkingValue
:
String
)
{
viewModelScope
.
launch
{
withContext
(
Dispatchers
.
IO
)
{
// // 查询倒车入库的车位
// const parkingSpot = SpaceData.find(
// (spot) => spot.spaceCode === parkingValue
// );
// return parkingSpot;
}
}
}
fun
startWS
()
{
fun
startWS
()
{
// val httpHeaders = mutableMapOf<String, String>()
// val httpHeaders = mutableMapOf<String, String>()
// httpHeaders.put("Cookie", "username=nemo")
// httpHeaders.put("Cookie", "username=nemo")
...
@@ -130,6 +338,8 @@ class MainVm @Inject constructor(
...
@@ -130,6 +338,8 @@ class MainVm @Inject constructor(
fun
cleanRes
()
{
fun
cleanRes
()
{
curTimer
.
cancel
()
curTimer
.
cancel
()
netSingTimer
.
cancel
()
netSingTimer
.
cancel
()
orderTimer
.
cancel
()
carSpaNoTimer
.
cancel
()
closeWS
()
closeWS
()
}
}
...
@@ -140,9 +350,9 @@ class MainVm @Inject constructor(
...
@@ -140,9 +350,9 @@ class MainVm @Inject constructor(
}
}
}
}
private
var
onSocketCb
=
object
:
MyWebSocketClient
.
OnSocketCb
{
private
var
onSocketCb
=
object
:
MyWebSocketClient
.
OnSocketCb
{
override
fun
onOpen
(
handshakedata
:
ServerHandshake
?)
{
override
fun
onOpen
(
handshakedata
:
ServerHandshake
?)
{
println
(
"--------Thread.currentThread() = ${Thread.currentThread()}"
)
}
}
override
fun
onClose
(
code
:
Int
,
reason
:
String
?,
remote
:
Boolean
)
{
override
fun
onClose
(
code
:
Int
,
reason
:
String
?,
remote
:
Boolean
)
{
...
@@ -158,20 +368,11 @@ class MainVm @Inject constructor(
...
@@ -158,20 +368,11 @@ class MainVm @Inject constructor(
viewModelScope
.
launch
{
viewModelScope
.
launch
{
val
bean
=
val
bean
=
parseSocketRepo
.
parseDataBean
(
res
.
data
,
CarVehicle
::
class
.
java
)
parseSocketRepo
.
parseDataBean
(
res
.
data
,
CarVehicle
::
class
.
java
)
println
(
"---车辆位姿数据 = ${bean}"
)
println
(
"------车辆位姿数据 = ${res.data}"
)
var
result
=
if
((
bean
.
vehicleData
.
count
())
>
0
)
{
parseSocketRepo
.
getOrderData
(
bean
.
vehicleData
?.
get
(
0
)
?.
vehiclePlate
?:
""
)
heading
.
set
(
bean
.
vehicleData
.
get
(
0
).
heading
.
toInt
())
when
(
result
)
{
speed
.
set
(
bean
.
vehicleData
.
get
(
0
).
speed
)
is
MyResult
.
Success
<
OrderBean
>
->
{
println
(
"-------订单信息---- = ${result.data}"
)
orderBean
.
value
=
result
.
data
}
else
->
{
// println("-------Error---- = ${result.msg}")
}
}
}
carVehicle
.
value
=
bean
// FileIoUtils.writeToFile(gson.toJson(bean), "carvehicle.txt")
// FileIoUtils.writeToFile(gson.toJson(bean), "carvehicle.txt")
}
}
}
}
...
@@ -180,7 +381,16 @@ class MainVm @Inject constructor(
...
@@ -180,7 +381,16 @@ class MainVm @Inject constructor(
viewModelScope
.
launch
{
viewModelScope
.
launch
{
val
bean
=
val
bean
=
parseSocketRepo
.
parseDataBean
(
res
.
data
,
VehicleStats
::
class
.
java
)
parseSocketRepo
.
parseDataBean
(
res
.
data
,
VehicleStats
::
class
.
java
)
println
(
"---联网车辆状态数据 = ${bean}"
)
println
(
"------联网车辆状态数据 = ${res.data}"
)
if
((
bean
.
vehicleData
.
count
())
>
0
)
{
val
str
=
when
(
bean
.
vehicleData
[
0
].
driveMode
)
{
0
->
"自动驾驶"
1
->
"人工驾驶"
2
->
"远程驾驶"
else
->
"—— ——"
}
driveMode
.
set
(
str
)
}
vehicleStat
.
value
=
bean
vehicleStat
.
value
=
bean
FileIoUtils
.
writeToFile
(
gson
.
toJson
(
bean
),
"vehicleS.txt"
)
FileIoUtils
.
writeToFile
(
gson
.
toJson
(
bean
),
"vehicleS.txt"
)
...
@@ -190,22 +400,64 @@ class MainVm @Inject constructor(
...
@@ -190,22 +400,64 @@ class MainVm @Inject constructor(
override
fun
onTarget
(
res
:
Response
.
SocketResponse
)
{
override
fun
onTarget
(
res
:
Response
.
SocketResponse
)
{
viewModelScope
.
launch
{
viewModelScope
.
launch
{
var
bean
=
parseSocketRepo
.
parseDataBean
(
res
.
data
,
PerTarget
::
class
.
java
)
var
bean
=
parseSocketRepo
.
parseDataBean
(
res
.
data
,
PerTarget
::
class
.
java
)
println
(
"---感知目标物数据 = ${bean}"
)
println
(
"---
--
感知目标物数据 = ${bean}"
)
targetPre
.
value
=
bean
targetPre
.
value
=
bean
// FileIoUtils.writeToFile(gson.toJson(bean), "target.txt")
// FileIoUtils.writeToFile(gson.toJson(bean), "target.txt")
}
}
}
}
override
fun
onStartV2x
(
res
:
Response
.
SocketResponse
)
{
override
fun
onStartV2x
(
res
:
Response
.
SocketResponse
)
{
println
(
"--------onStartV2x"
)
viewModelScope
.
launch
{
println
(
"-----V2X预警开始 = ${res.data}"
)
FileIoUtils
.
writeToFile
(
res
.
data
,
"onStartV2x.txt"
)
}
}
}
override
fun
onEndV2x
(
res
:
Response
.
SocketResponse
)
{
override
fun
onEndV2x
(
res
:
Response
.
SocketResponse
)
{
println
(
"--------onEndV2x"
)
println
(
"--------V2X预警结束--${res.data}"
)
viewModelScope
.
launch
{
}
}
}
override
fun
onPoint
(
res
:
Response
.
SocketResponse
)
{
override
fun
onPoint
(
res
:
Response
.
SocketResponse
)
{
println
(
"--------onPoint"
)
viewModelScope
.
launch
{
println
(
"-----停车位变更 = ${res.data}"
)
var
bean
=
parseSocketRepo
.
parseDataBean
(
res
.
data
,
ParkBean
::
class
.
java
)
parkBean
.
value
=
bean
FileIoUtils
.
writeToFile
(
gson
.
toJson
(
bean
),
"park.txt"
)
}
}
override
fun
onLinePlaning
(
res
:
Response
.
SocketResponse
)
{
viewModelScope
.
launch
{
println
(
"-----全局路径发生切换 = ${res.data}"
)
var
bean
=
parseSocketRepo
.
parseDataBean
(
res
.
data
,
LinePlaningBean
::
class
.
java
)
// parkBean.value = bean
FileIoUtils
.
writeToFile
(
res
.
data
,
"line_plan.txt"
)
// FileIoUtils.writeToFile(gson.toJson(bean), "line_plan.txt")
}
}
override
fun
onPartLine
(
res
:
Response
.
SocketResponse
)
{
viewModelScope
.
launch
{
println
(
"-----局部路径 = ${res.data}"
)
var
bean
=
parseSocketRepo
.
parseDataBean
(
res
.
data
,
PartLineBean
::
class
.
java
)
// parkBean.value = bean
FileIoUtils
.
writeToFile
(
res
.
data
,
"part_line.txt"
)
// FileIoUtils.writeToFile(gson.toJson(bean), "part_line.txt")
}
}
override
fun
onRsiEvent
(
res
:
Response
.
SocketResponse
)
{
viewModelScope
.
launch
{
println
(
"-----rsi事件 = ${res.data}"
)
var
bean
=
parseSocketRepo
.
parseDataBean
(
res
.
data
,
RsiEventBean
::
class
.
java
)
// parkBean.value = bean
// FileIoUtils.writeToFile(gson.toJson(bean), "rsi_event.txt")
FileIoUtils
.
writeToFile
(
res
.
data
,
"rsi_event.txt"
)
}
}
}
}
}
...
@@ -250,11 +502,31 @@ class MainVm @Inject constructor(
...
@@ -250,11 +502,31 @@ class MainVm @Inject constructor(
}
}
/*** 更新停车位**/
/*** 更新停车位**/
fun
subPoints
()
{
fun
subPoints
()
:
LiveData
<
ParkBean
>
{
val
reqStr
=
getSendData
(
"/topic/points"
)
val
reqStr
=
getSendData
(
"/topic/points"
)
client
?.
send
(
reqStr
)
client
?.
send
(
reqStr
)
return
parkBean
}
}
/*** 全局路径发生切换**/
fun
subLinePlaning
()
{
val
reqStr
=
getSendData
(
"/topic/linePlaning"
)
client
?.
send
(
reqStr
)
}
/*** 局部路径**/
fun
subPartLine
()
{
val
reqStr
=
getSendData
(
"/topic/partLine"
)
client
?.
send
(
reqStr
)
}
/*** rsi事件**/
fun
subRsiEvent
()
{
val
reqStr
=
getSendData
(
"/topic/rsiEvent"
)
client
?.
send
(
reqStr
)
}
fun
getSendData
(
key
:
String
):
String
{
fun
getSendData
(
key
:
String
):
String
{
var
data
=
WebSetBean
.
subDic
.
get
(
key
)
var
data
=
WebSetBean
.
subDic
.
get
(
key
)
var
req
=
ReqBean
()
var
req
=
ReqBean
()
...
@@ -269,20 +541,5 @@ class MainVm @Inject constructor(
...
@@ -269,20 +541,5 @@ class MainVm @Inject constructor(
ToastHelper
.
showCustViewShort
(
context
,
imgs
.
get
(
"2"
)
!!
)
ToastHelper
.
showCustViewShort
(
context
,
imgs
.
get
(
"2"
)
!!
)
}
}
fun
getSpaceData
()
{
// viewModelScope.launch {
// var result = spaceNoRepo.getSpaceData()
// when (result) {
// is MyResult.Success<SpaceNoBean> -> {
// var a = 0
// }
//
// else -> {
// var b = 0
// }
// }
// }
}
}
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/websockets/MyWebSocketClient.kt
View file @
9aff9409
...
@@ -53,7 +53,7 @@ class MyWebSocketClient : WebSocketClient {
...
@@ -53,7 +53,7 @@ class MyWebSocketClient : WebSocketClient {
// System.out.println(TAG + " received ByteBuffer")
// System.out.println(TAG + " received ByteBuffer")
val
socketResponse
=
Response
.
SocketResponse
.
parseFrom
(
bytes
)
val
socketResponse
=
Response
.
SocketResponse
.
parseFrom
(
bytes
)
when
(
socketResponse
.
msgType
)
{
when
(
socketResponse
.
msgType
)
{
5231
->
{
//
联网
车辆位姿数据
5231
->
{
//车辆位姿数据
onDataCb
?.
onVehicle
(
socketResponse
)
onDataCb
?.
onVehicle
(
socketResponse
)
}
}
5232
->
{
//感知目标物数据
5232
->
{
//感知目标物数据
...
@@ -68,9 +68,18 @@ class MyWebSocketClient : WebSocketClient {
...
@@ -68,9 +68,18 @@ class MyWebSocketClient : WebSocketClient {
5236
->
{
//联网车辆状态数据
5236
->
{
//联网车辆状态数据
onDataCb
?.
onVehicleStats
(
socketResponse
)
onDataCb
?.
onVehicleStats
(
socketResponse
)
}
}
1
->
{
//
更新停车场
1
->
{
//
停车位变更
onDataCb
?.
onPoint
(
socketResponse
)
onDataCb
?.
onPoint
(
socketResponse
)
}
}
52310
->
{
//全局路径发生切换
onDataCb
?.
onLinePlaning
(
socketResponse
)
}
52311
->
{
//局部路径
onDataCb
?.
onPartLine
(
socketResponse
)
}
52312
->
{
//rsi事件
onDataCb
?.
onRsiEvent
(
socketResponse
)
}
}
}
}
}
...
@@ -103,7 +112,11 @@ class MyWebSocketClient : WebSocketClient {
...
@@ -103,7 +112,11 @@ class MyWebSocketClient : WebSocketClient {
fun
onTarget
(
res
:
Response
.
SocketResponse
)
fun
onTarget
(
res
:
Response
.
SocketResponse
)
fun
onStartV2x
(
res
:
Response
.
SocketResponse
)
fun
onStartV2x
(
res
:
Response
.
SocketResponse
)
fun
onEndV2x
(
res
:
Response
.
SocketResponse
)
fun
onEndV2x
(
res
:
Response
.
SocketResponse
)
/***停车位变更***/
fun
onPoint
(
res
:
Response
.
SocketResponse
)
fun
onPoint
(
res
:
Response
.
SocketResponse
)
fun
onLinePlaning
(
res
:
Response
.
SocketResponse
)
fun
onPartLine
(
res
:
Response
.
SocketResponse
)
fun
onRsiEvent
(
res
:
Response
.
SocketResponse
)
}
}
...
...
app/src/main/res/layout/activity_main.xml
View file @
9aff9409
...
@@ -133,7 +133,7 @@
...
@@ -133,7 +133,7 @@
android:id=
"@+id/bt_status"
android:id=
"@+id/bt_status"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"联网车辆状态
数据
"
/>
android:text=
"联网车辆状态"
/>
<Button
<Button
android:id=
"@+id/bt_target"
android:id=
"@+id/bt_target"
...
@@ -159,6 +159,24 @@
...
@@ -159,6 +159,24 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"停车位变更"
/>
android:text=
"停车位变更"
/>
<Button
android:id=
"@+id/bt_allline"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"全局路径发生切换"
/>
<Button
android:id=
"@+id/bt_jubuline"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"局部路径"
/>
<Button
android:id=
"@+id/bt_rsi"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"rsi事件"
/>
</LinearLayout>
</LinearLayout>
<RelativeLayout
<RelativeLayout
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment