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
Hide whitespace changes
Inline
Side-by-side
app/build.gradle.kts
View file @
816a069a
...
@@ -55,7 +55,8 @@ dependencies {
...
@@ -55,7 +55,8 @@ dependencies {
androidTestImplementation
(
libs
.
androidx
.
junit
)
androidTestImplementation
(
libs
.
androidx
.
junit
)
androidTestImplementation
(
libs
.
androidx
.
espresso
.
core
)
androidTestImplementation
(
libs
.
androidx
.
espresso
.
core
)
//java web socket
implementation
(
"org.java-websocket:Java-WebSocket:1.6.0"
)
// Hilt dependencies
// Hilt dependencies
val
hilt_version
=
"2.56.1"
val
hilt_version
=
"2.56.1"
implementation
(
"com.google.dagger:hilt-android:$hilt_version"
)
implementation
(
"com.google.dagger:hilt-android:$hilt_version"
)
...
@@ -68,7 +69,7 @@ dependencies {
...
@@ -68,7 +69,7 @@ dependencies {
implementation
(
"com.guolindev.permissionx:permissionx:1.8.1"
)
implementation
(
"com.guolindev.permissionx:permissionx:1.8.1"
)
//加密库
//加密库
implementation
(
"androidx.security:security-crypto:1.0.0"
)
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"
)
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
...
@@ -4,18 +4,12 @@ package com.sd.cavphmi.net
* A generic class that holds a value with its loading status.
* A generic class that holds a value with its loading status.
* @param <T>
* @param <T>
</T> */
</T> */
data class
MyBaseResource
<
out
T
>(
val
data
:
T
,
var
code
:
Int
,
var
msg
:
String
)
{
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)
sealed
class
MyResult
<
out
T
>
{
// }
//
data class
Success
<
out
T
>(
val
data
:
T
)
:
MyResult
<
T
>()
// fun <T> error(msg: String, data: T?): BaseResource<T> {
data class
Error
(
var
eCode
:
Int
,
var
msg
:
String
)
:
MyResult
<
Nothing
>()
// return BaseResource(data, msg)
// }
//
// fun <T> loading(data: T?): BaseResource<T> {
// return BaseResource(data, null)
// }
// }
}
}
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>() {
...
@@ -112,7 +112,7 @@ class BootActivity : BaseActivity<ActivityBootBinding, MyBaseViewModel>() {
ToastHelper
.
showShort
(
this
,
"权限被拒"
)
ToastHelper
.
showShort
(
this
,
"权限被拒"
)
binding
.
root
.
postDelayed
({
binding
.
root
.
postDelayed
({
finish
()
finish
()
},
1
50
)
},
5
0
0
)
}
}
}
}
...
...
app/src/main/java/com/sd/cavphmi/ui/MainActivity.kt
View file @
816a069a
package
com.sd.cavphmi.ui
package
com.sd.cavphmi.ui
import
android.content.DialogInterface
import
android.view.KeyEvent
import
androidx.appcompat.app.AlertDialog
import
androidx.lifecycle.ViewModelProvider
import
androidx.lifecycle.ViewModelProvider
import
com.sd.cavphmi.BR
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.base.MyBaseViewModel
import
com.sd.cavphmi.base.MyBaseViewModel
import
com.sd.cavphmi.databinding.ActivityMainBinding
import
com.sd.cavphmi.databinding.ActivityMainBinding
import
com.sd.cavphmi.viewmodels.MainVm
import
dagger.hilt.android.AndroidEntryPoint
import
dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
@AndroidEntryPoint
class
MainActivity
:
BaseActivity
<
ActivityMainBinding
,
M
yBaseViewModel
>()
{
class
MainActivity
:
BaseActivity
<
ActivityMainBinding
,
M
ainVm
>()
{
override
fun
getStatuBarColor
():
Int
{
override
fun
getStatuBarColor
():
Int
{
return
-
1
return
-
1
...
@@ -20,8 +24,8 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
...
@@ -20,8 +24,8 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
return
R
.
layout
.
activity_main
return
R
.
layout
.
activity_main
}
}
override
fun
initViewModel
():
M
yBaseViewModel
{
override
fun
initViewModel
():
M
ainVm
{
return
ViewModelProvider
(
this
).
get
(
M
yBaseViewModel
::
class
.
java
)
return
ViewModelProvider
(
this
).
get
(
M
ainVm
::
class
.
java
)
}
}
override
fun
initVariableId
():
Int
{
override
fun
initVariableId
():
Int
{
...
@@ -30,8 +34,38 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
...
@@ -30,8 +34,38 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
override
fun
initView
()
{
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
...
@@ -2,39 +2,12 @@ package com.sd.cavphmi.utils
object
MyContants
{
object
MyContants
{
const
val
IS_DEBUG
=
true
const
val
IS_DEBUG
=
true
var
HOST
=
if
(
IS_DEBUG
)
"http://
laravel.suiyigou.shop/"
else
"https://api.suixinsuiyi.cn/
"
var
HOST
=
if
(
IS_DEBUG
)
"http
s
://
sip-avp.isungent.cn:8443"
else
"
"
var
PORT
=
if
(
IS_DEBUG
)
"123"
else
"34534"
//
var PORT = if (IS_DEBUG) "123" else "34534"
var
SOCKET_HOSTNAME
=
var
WS_HOST
=
if
(
IS_DEBUG
)
"192.168.60.77"
else
""
if
(
IS_DEBUG
)
"wss://sip-avp.isungent.cn:8443/socket/ws?clientSource=100"
else
""
var
SOCKET_RECEIVE_PORT
=
if
(
IS_DEBUG
)
8082
else
0
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
package
com.sd.cavphmi.utils
import
android.content.Context
import
android.content.Context
import
android.text.SpannableString
import
android.view.Gravity
import
android.view.Gravity
import
android.view.LayoutInflater
import
android.view.LayoutInflater
import
android.widget.TextView
import
android.view.View
import
android.widget.ImageView
import
android.widget.Toast
import
android.widget.Toast
import
androidx.annotation.DrawableRes
import
com.sd.cavphmi.R
/**
/**
...
@@ -23,6 +25,19 @@ object ToastHelper {
...
@@ -23,6 +25,19 @@ object ToastHelper {
show
()
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
// * 短时间显示Toast
// */
// */
...
@@ -34,7 +49,6 @@ object ToastHelper {
...
@@ -34,7 +49,6 @@ object ToastHelper {
// }
// }
// /**
// /**
// * 短时间显示Toast
// * 短时间显示Toast
// *
// *
...
...
app/src/main/java/com/sd/cavphmi/utils/Utils.java
View file @
816a069a
...
@@ -520,17 +520,17 @@ public class Utils {
...
@@ -520,17 +520,17 @@ public class Utils {
*
*
* @return
* @return
*/
*/
public
boolean
isMobilePhone
()
{
//
public boolean isMobilePhone() {
try
{
//
try {
if
(
ScreenUtil
.
getInstance
().
isScreenLandscape
()
&&
getTotalRam
(
mContext
)
<=
2.0f
//
if (ScreenUtil.getInstance().isScreenLandscape() && getTotalRam(mContext) <= 2.0f
&&
getSdcardAvailableSize
(
SDKInitializer
.
getAppPath
())
<
(
25L
*
1024
*
1024
*
1024
))
{
//
&& getSdcardAvailableSize(SDKInitializer.getAppPath()) < (25L * 1024 * 1024 * 1024)) {
return
false
;
//
return false;
}
//
}
}
catch
(
Exception
e
)
{
//
} catch (Exception e) {
e
.
printStackTrace
();
//
e.printStackTrace();
}
//
}
return
true
;
//
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