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
816a069a
Commit
816a069a
authored
Jun 10, 2025
by
p x
Browse files
添加websocket
parent
1ccbc004
Changes
30
Expand all
Show whitespace changes
Inline
Side-by-side
app/build.gradle.kts
View file @
816a069a
...
...
@@ -55,7 +55,8 @@ dependencies {
androidTestImplementation
(
libs
.
androidx
.
junit
)
androidTestImplementation
(
libs
.
androidx
.
espresso
.
core
)
//java web socket
implementation
(
"org.java-websocket:Java-WebSocket:1.6.0"
)
// Hilt dependencies
val
hilt_version
=
"2.56.1"
implementation
(
"com.google.dagger:hilt-android:$hilt_version"
)
...
...
@@ -68,7 +69,7 @@ dependencies {
implementation
(
"com.guolindev.permissionx:permissionx:1.8.1"
)
//加密库
implementation
(
"androidx.security:security-crypto:1.0.0"
)
implementation
(
"com.gyf.immersionbar:immersionbar:2.3.3-beta15"
)
//
implementation("com.gyf.immersionbar:immersionbar:2.3.3-beta15")
//网络
implementation
(
"io.reactivex.rxjava3:rxjava:3.0.8"
)
...
...
app/src/main/assets/11582.mp3
0 → 100644
View file @
816a069a
File added
app/src/main/assets/CarJSON.json
0 → 100644
View file @
816a069a
This diff is collapsed.
Click to expand it.
app/src/main/assets/SpaceJSON.json
0 → 100644
View file @
816a069a
This diff is collapsed.
Click to expand it.
app/src/main/assets/postData.json
0 → 100644
View file @
816a069a
This diff is collapsed.
Click to expand it.
app/src/main/java/com/sd/cavphmi/bean/SpaceNoBean.kt
0 → 100644
View file @
816a069a
package
com.sd.cavphmi.bean
class
SpaceNoBean
{
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/bean/VToXImgBean.kt
0 → 100644
View file @
816a069a
package
com.sd.cavphmi.bean
import
com.sd.cavphmi.R
object
VToXImgBean
{
var
imgs
=
mapOf
(
"1"
to
R
.
drawable
.
abnormal
,
"2"
to
R
.
drawable
.
admission
,
"3"
to
R
.
drawable
.
advance
,
"4"
to
R
.
drawable
.
change_lanes
,
"5"
to
R
.
drawable
.
intersection
,
"6"
to
R
.
drawable
.
weak
,
)
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/bean/WebSetBean.kt
0 → 100644
View file @
816a069a
package
com.sd.cavphmi.bean
object
WebSetBean
{
/* "/topic/vehicle"to "/topic/vehicle/1556919708184276993", */
var
dic
=
mapOf
(
"/topic/vehicle"
to
"/avp/api/VL961/vehicle/1694264612474306561"
,
"/topic/dataMerge"
to
"/avp/api/VL961/dataMerge"
,
"/topic/signal"
to
"/avp/api/VL961/signal"
,
"/topic/v2xStart"
to
"/avp/api/VL961/v2xStart"
,
"/topic/v2xEnd"
to
"/avp/api/VL961/v2xEnd"
,
"/topic/vehicleStatus"
to
"/avp/api/VL961/vehicleStatus"
,
"/topic/timeDelay"
to
"/avp/api/VL961/timeDelay"
,
"/topic/points"
to
"/avp/api/VL961/points"
,
)
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/moudule/NetworkModule.kt
0 → 100644
View file @
816a069a
package
com.sd.cavphmi.moudule
import
com.sd.cavphmi.net.RetrofitApi
import
com.sd.cavphmi.net.RetrofitApi.retrofitBuild
import
com.sd.cavphmi.net.httpmothod.ClientRetrofitMethod
import
dagger.Module
import
dagger.Provides
import
dagger.hilt.InstallIn
import
dagger.hilt.components.SingletonComponent
import
okhttp3.OkHttpClient
import
okhttp3.logging.HttpLoggingInterceptor
import
java.security.KeyStore
import
java.util.*
import
javax.inject.Qualifier
import
javax.inject.Singleton
import
javax.net.ssl.*
@Qualifier
@Retention
(
AnnotationRetention
.
BINARY
)
annotation
class
OriginOkHttpClient
@Qualifier
@Retention
(
AnnotationRetention
.
BINARY
)
annotation
class
AuthInterceptorOkHttpClient
@Qualifier
@Retention
(
AnnotationRetention
.
BINARY
)
annotation
class
NormalInterceptorOkHttpClient
@Module
@InstallIn
(
SingletonComponent
::
class
)
object
NetworkModule
{
var
logging
=
HttpLoggingInterceptor
()
init
{
logging
.
level
=
HttpLoggingInterceptor
.
Level
.
BODY
}
@OriginOkHttpClient
@Provides
fun
provideOriginOkHttpClient
():
OkHttpClient
{
return
OkHttpClient
.
Builder
()
.
addInterceptor
(
logging
)
.
build
()
}
@NormalInterceptorOkHttpClient
@Provides
fun
provideNormalInterceptorOkHttpClient
(
// headParamsInterceptor: HeadParamsInterceptor,
):
OkHttpClient
{
return
OkHttpClient
.
Builder
()
.
cache
(
RetrofitApi
.
cache
)
// .addInterceptor(headParamsInterceptor)
.
hostnameVerifier
{
hostname
,
session
->
true
}
.
addInterceptor
(
logging
)
.
build
()
}
//------------------API 方法---------------
@Singleton
@Provides
fun
provideClientRetrofitService
(
@NormalInterceptorOkHttpClient
okHttpClient
:
OkHttpClient
):
ClientRetrofitMethod
{
return
retrofitBuild
.
client
(
okHttpClient
).
build
().
create
(
ClientRetrofitMethod
::
class
.
java
)
}
fun
getSSlSocketFactory
():
SslData
{
val
trustManagerFactory
:
TrustManagerFactory
=
TrustManagerFactory
.
getInstance
(
TrustManagerFactory
.
getDefaultAlgorithm
()
)
trustManagerFactory
.
init
(
null
as
KeyStore
?)
val
trustManagers
:
Array
<
TrustManager
>
=
trustManagerFactory
.
getTrustManagers
()
check
(!(
trustManagers
.
size
!=
1
||
trustManagers
[
0
]
!
is
X509TrustManager
))
{
(
"Unexpected default trust managers:"
+
Arrays
.
toString
(
trustManagers
))
}
val
trustManager
=
trustManagers
[
0
]
as
X509TrustManager
val
sslContext
=
SSLContext
.
getInstance
(
"TLS"
)
sslContext
.
init
(
null
,
arrayOf
<
TrustManager
>(
trustManager
),
null
)
val
sslSocketFactory
=
sslContext
.
socketFactory
return
SslData
(
sslSocketFactory
,
trustManager
)
}
data class
SslData
(
val
sslSocketFactory
:
SSLSocketFactory
,
var
trustManager
:
X509TrustManager
)
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/net/MyBaseObserver.kt
deleted
100644 → 0
View file @
1ccbc004
package
com.sd.cavphmi.net
import
com.google.gson.JsonSyntaxException
import
io.reactivex.rxjava3.core.Observer
import
io.reactivex.rxjava3.disposables.Disposable
import
retrofit2.HttpException
import
java.net.SocketTimeoutException
abstract
class
MyBaseObserver
<
T
>
:
Observer
<
MyBaseResource
<
T
>>
{
override
fun
onSubscribe
(
d
:
Disposable
)
{
// ToastHelper.showShort(context, "onSubscribe")
}
override
fun
onNext
(
t
:
MyBaseResource
<
T
>)
{
// onSuccess(t?.data ?: "" as T)
when
(
t
?.
code
)
{
200
->
onSuccess
(
t
?.
data
?:
""
as
T
)
4001
->
loginTimeout
()
else
->
{
onFailed
(
t
?.
msg
?:
"error"
)
}
}
}
override
fun
onError
(
e
:
Throwable
)
{
when
(
e
)
{
is
HttpException
->
{
// var body = e.response().errorBody()?.string() ?: "error"
onFailed
(
e
.
message
.
toString
())
}
is
JsonSyntaxException
->
{
// onFailed("数据异常js")
e
?.
printStackTrace
()
onFailed
(
"0x00000001"
)
}
is
SocketTimeoutException
->
{
onFailed
(
"Time Out"
)
}
else
->
{
println
(
" -------------其他异常"
)
e
?.
printStackTrace
()
onFailed
(
e
?.
message
?:
""
)
}
}
}
override
fun
onComplete
()
{
}
protected
abstract
fun
loginTimeout
()
protected
abstract
fun
onSuccess
(
t
:
T
)
protected
abstract
fun
onFailed
(
error
:
String
)
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/net/MyBaseResource.kt
View file @
816a069a
...
...
@@ -4,18 +4,12 @@ package com.sd.cavphmi.net
* A generic class that holds a value with its loading status.
* @param <T>
</T> */
data class
MyBaseResource
<
out
T
>(
val
data
:
T
,
var
code
:
Int
,
var
msg
:
String
)
{
// companion object {
// fun <T> success(data: T?): BaseResource<T> {
// return BaseResource(data, null)
// }
//
// fun <T> error(msg: String, data: T?): BaseResource<T> {
// return BaseResource(data, msg)
// }
//
// fun <T> loading(data: T?): BaseResource<T> {
// return BaseResource(data, null)
// }
// }
data class
MyBaseResource
<
out
T
>(
val
data
:
T
,
var
code
:
Int
,
var
msg
:
String
)
sealed
class
MyResult
<
out
T
>
{
data class
Success
<
out
T
>(
val
data
:
T
)
:
MyResult
<
T
>()
data class
Error
(
var
eCode
:
Int
,
var
msg
:
String
)
:
MyResult
<
Nothing
>()
}
app/src/main/java/com/sd/cavphmi/net/httpmothod/ClientRetrofitMethod.kt
0 → 100644
View file @
816a069a
package
com.sd.cavphmi.net.httpmothod
import
com.sd.cavphmi.bean.SpaceNoBean
import
com.sd.cavphmi.net.MyBaseResource
import
io.reactivex.rxjava3.core.Observable
import
okhttp3.RequestBody
import
retrofit2.http.Body
import
retrofit2.http.POST
interface
ClientRetrofitMethod
{
/**
* 获取配置文件
*/
// @Headers("Cache-Control:public,max-age=3600")
// @GET("http://59.175.163.12/serv-addr/server.json")
// fun getConfigurations(): Observable<List<ConfigurationBean>>
//
/**排序字段sortBy
排序方向order
*/
@POST
(
"hkapi/pms/v1/parkingSpace/spaceNo"
)
suspend
fun
getSpaceData
(
@Body
body
:
RequestBody
):
MyBaseResource
<
SpaceNoBean
>
/**
* 话题根据评论ID查询所有回复
*/
// @GET("cm/topic/reply/v1/getByCommentId")
// fun getTopicByAnswerId(@Query("id") id: String): Observable<BaseResponse<List<UserAnswer>>>
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/repositorys/SpaceNoRepo.kt
0 → 100644
View file @
816a069a
package
com.sd.cavphmi.repositorys
import
com.sd.cavphmi.bean.SpaceNoBean
import
com.sd.cavphmi.net.MyBaseResource
import
com.sd.cavphmi.net.MyResult
import
com.sd.cavphmi.net.RequestBodyUtil
import
com.sd.cavphmi.net.httpmothod.ClientRetrofitMethod
import
retrofit2.HttpException
import
javax.inject.Inject
class
SpaceNoRepo
@Inject
constructor
(
var
clientRetrofitMethod
:
ClientRetrofitMethod
)
{
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/BootActivity.kt
View file @
816a069a
...
...
@@ -112,7 +112,7 @@ class BootActivity : BaseActivity<ActivityBootBinding, MyBaseViewModel>() {
ToastHelper
.
showShort
(
this
,
"权限被拒"
)
binding
.
root
.
postDelayed
({
finish
()
},
1
50
)
},
5
0
0
)
}
}
...
...
app/src/main/java/com/sd/cavphmi/ui/MainActivity.kt
View file @
816a069a
package
com.sd.cavphmi.ui
import
android.content.DialogInterface
import
android.view.KeyEvent
import
androidx.appcompat.app.AlertDialog
import
androidx.lifecycle.ViewModelProvider
import
com.sd.cavphmi.BR
import
com.sd.cavphmi.R
import
com.sd.cavphmi.base.BaseActivity
import
com.sd.cavphmi.base.MyBaseViewModel
import
com.sd.cavphmi.databinding.ActivityMainBinding
import
com.sd.cavphmi.viewmodels.MainVm
import
dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class
MainActivity
:
BaseActivity
<
ActivityMainBinding
,
M
yBaseViewModel
>()
{
class
MainActivity
:
BaseActivity
<
ActivityMainBinding
,
M
ainVm
>()
{
override
fun
getStatuBarColor
():
Int
{
return
-
1
...
...
@@ -20,8 +24,8 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
return
R
.
layout
.
activity_main
}
override
fun
initViewModel
():
M
yBaseViewModel
{
return
ViewModelProvider
(
this
).
get
(
M
yBaseViewModel
::
class
.
java
)
override
fun
initViewModel
():
M
ainVm
{
return
ViewModelProvider
(
this
).
get
(
M
ainVm
::
class
.
java
)
}
override
fun
initVariableId
():
Int
{
...
...
@@ -30,8 +34,38 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
override
fun
initView
()
{
// viewModel.showVToTip()
viewModel
.
startWS
()
}
override
fun
getToData
()
{
// viewModel.getSpaceData()
}
override
fun
dispatchKeyEvent
(
event
:
KeyEvent
):
Boolean
{
if
((
event
.
getKeyCode
()
==
KeyEvent
.
KEYCODE_BACK
)
||
event
.
getKeyCode
()
==
KeyEvent
.
KEYCODE_HOME
)
{
//如果是导航中,提示清除资源
val
dialog
=
AlertDialog
.
Builder
(
this
)
// dialog.setIcon(android.R.drawable.ic_dialog_info)
dialog
.
setTitle
(
"提示"
)
dialog
.
setMessage
(
"确定退出应用"
)
dialog
.
setPositiveButton
(
"确定"
,
DialogInterface
.
OnClickListener
{
dialog1
:
DialogInterface
?,
which
:
Int
->
viewModel
.
closeWS
()
finish
()
})
dialog
.
setNegativeButton
(
"取消"
,
DialogInterface
.
OnClickListener
{
dialog12
:
DialogInterface
?,
which
:
Int
->
})
dialog
.
show
()
return
true
}
else
{
return
super
.
dispatchKeyEvent
(
event
)
}
}
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/utils/FileIoUtils.kt
0 → 100644
View file @
816a069a
This diff is collapsed.
Click to expand it.
app/src/main/java/com/sd/cavphmi/utils/MyContants.kt
View file @
816a069a
...
...
@@ -2,39 +2,12 @@ package com.sd.cavphmi.utils
object
MyContants
{
const
val
IS_DEBUG
=
true
var
HOST
=
if
(
IS_DEBUG
)
"http://
laravel.suiyigou.shop/"
else
"https://api.suixinsuiyi.cn/
"
var
PORT
=
if
(
IS_DEBUG
)
"123"
else
"34534"
var
HOST
=
if
(
IS_DEBUG
)
"http
s
://
sip-avp.isungent.cn:8443"
else
"
"
//
var PORT = if (IS_DEBUG) "123" else "34534"
var
SOCKET_HOSTNAME
=
if
(
IS_DEBUG
)
"192.168.60.77"
else
""
var
SOCKET_RECEIVE_PORT
=
if
(
IS_DEBUG
)
8082
else
0
var
WS_HOST
=
if
(
IS_DEBUG
)
"wss://sip-avp.isungent.cn:8443/socket/ws?clientSource=100"
else
""
var
DOWNLOAD_APP_URL
=
"https://app.mi.com/download/1325540?id=com.sxsy.easyclient&ref=search&nonce=-6756103978404716128%3A26875199&appClientId=2882303761517485445&appSignature=BJDg3ZbQJhRoaomIe0kkGJ32i6hbX9HduukAmwpZqpQ"
const
val
PERMISSON_REQUESTCODE
:
Int
=
10
const
val
online
=
true
/**
* 智旅APK传智*/
const
val
LAT_LNG_INFO
=
"LAT_LNG_INFO"
/***当前速度***/
var
CUR_SPEED
=
0
const
val
MOCK_LAT
=
39.9129
const
val
MOCK_LNG
=
116.3723
// var CUR_LAT = MOCK_LAT
// var CUR_LNG = MOCK_LNG
var
CUR_LAT
=
0.0
var
CUR_LNG
=
0.0
// const val MOCK_LAT = 39.56
// const val MOCK_LNG = 116.20
// 116.372641,39.913242
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/utils/ScreenUtil.java
deleted
100644 → 0
View file @
1ccbc004
This diff is collapsed.
Click to expand it.
app/src/main/java/com/sd/cavphmi/utils/ToastHelper.kt
View file @
816a069a
package
com.sd.cavphmi.utils
import
android.content.Context
import
android.text.SpannableString
import
android.view.Gravity
import
android.view.LayoutInflater
import
android.widget.TextView
import
android.view.View
import
android.widget.ImageView
import
android.widget.Toast
import
androidx.annotation.DrawableRes
import
com.sd.cavphmi.R
/**
...
...
@@ -23,6 +25,19 @@ object ToastHelper {
show
()
}
}
fun
showCustViewShort
(
context
:
Context
,
@DrawableRes
resId
:
Int
)
{
val
customToastRoot
=
LayoutInflater
.
from
(
context
).
inflate
(
R
.
layout
.
toast_tip
,
null
)
// 获取布局中的视图元素
val
imageView
=
customToastRoot
.
findViewById
<
ImageView
>(
R
.
id
.
img_tip
)
imageView
.
setImageResource
(
resId
)
val
toast
=
Toast
(
context
)
toast
.
view
=
customToastRoot
toast
.
duration
=
Toast
.
LENGTH_SHORT
// toast.setGravity(Gravity.TOP,0,0)
toast
.
show
()
}
// /**
// * 短时间显示Toast
// */
...
...
@@ -34,7 +49,6 @@ object ToastHelper {
// }
// /**
// * 短时间显示Toast
// *
...
...
app/src/main/java/com/sd/cavphmi/utils/Utils.java
View file @
816a069a
...
...
@@ -520,17 +520,17 @@ public class Utils {
*
* @return
*/
public
boolean
isMobilePhone
()
{
try
{
if
(
ScreenUtil
.
getInstance
().
isScreenLandscape
()
&&
getTotalRam
(
mContext
)
<=
2.0f
&&
getSdcardAvailableSize
(
SDKInitializer
.
getAppPath
())
<
(
25L
*
1024
*
1024
*
1024
))
{
return
false
;
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
true
;
}
//
public boolean isMobilePhone() {
//
try {
//
if (ScreenUtil.getInstance().isScreenLandscape() && getTotalRam(mContext) <= 2.0f
//
&& getSdcardAvailableSize(SDKInitializer.getAppPath()) < (25L * 1024 * 1024 * 1024)) {
//
return false;
//
}
//
} catch (Exception e) {
//
e.printStackTrace();
//
}
//
return true;
//
}
/**
* 根据包名获取当前数据存储的路径后缀
...
...
Prev
1
2
Next
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