被通知学习kotlin做一个Android小项目
准备
第一步 学习《第一行代码–Android》+《kotlin从零到精通》
看的领导买的书,没钱买书的同学可以私聊我要电子版
学习路线
第一章+第二章+第三章+第九章
第二步 确认需求
第三步 百度websocket相关知识
开始
- 导入依赖
implementation "org.jetbrains.anko:anko-common:$anko_version"
implementation "org.java-websocket:Java-WebSocket:1.3.6"
implementation 'com.squareup.okhttp3:okhttp:3.8.1'
testImplementation 'junit:junit:4.12'
implementation 'com.google.code.gson:gson:2.8.2'
- 布局
- 编写控制器
查阅很多资料,貌似这个框架自带心跳帧,能够保活。但是断后重新连接需要自己去写。
private fun webSocketConnect() {
Thread(Runnable {
var url = "ws://echo.websocket.org"
var listener: ClientWebSocketListener = ClientWebSocketListener()
var client = OkHttpClient.Builder().
readTimeout(3, TimeUnit.SECONDS)//设置读取超时时间
.writeTimeout(3, TimeUnit.SECONDS)//设置写的超时时间
.connectTimeout(3, TimeUnit.SECONDS)//设置连接超时时间
.pingInterval(10, TimeUnit.SECONDS) //设置心跳帧发送时间
.build()
val request = Request.Builder()
.url(url)
.build()
client.newWebSocket(request, listener)
client.dispatcher().executorService().shutdown()
}).start()
}
//根据需求重写
public inner class ClientWebSocketListener : WebSocketListener() {
// 连接时发送消息,后续发消息可以用WebSocket.send()方法
override fun onOpen(webSocket: WebSocket?, response: Response?) {
}
override fun onFailure(webSocket: WebSocket?, t: Throwable?, response: Response?) {
}
override fun onClosing(webSocket: WebSocket?, code: Int, reason: String?) {
}
// 接收消息
override fun onMessage(webSocket: WebSocket?, text: String?) {
}
override fun onMessage(webSocket: WebSocket?, bytes: ByteString?) {
}
override fun onClosed(webSocket: WebSocket?, code: Int, reason: String?) {
}
}
一些边角料
- 全屏显示去掉标题栏
//去掉顶部标题
getSupportActionBar()?.hide();
//去掉最上面时间、电量等
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
, WindowManager.LayoutParams.FLAG_FULLSCREEN)
- Gson转Map
Gson().fromJson(text, Map::class.java)
- 改变UI
runOnUiThread{}
- 设置app开机代替主屏幕自启动
在AndroidManifest.xml添加
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />