[Kotlin/Java] 在桌面端中使用蓝牙(一转吐槽Oracle)
JVM糟糕的桌面生态
博主想用Kotlin编写一个桌面端蓝牙程序,作为API Caller
自然是要找库。然后便发现Java那糟糕的桌面生态。
JVM糟糕的桌面生态与Oracle的作恶有密切关系。Oracle手握Java版权,守着自己在服务端的一亩三分地吸金,固步自封,踢开了Eclipse,与Google大打官司,解散了AWT,Swing等工作组。结果是什么?在移动端Google推出了Dart,Jetbrains推出了Kotlin,抢走了Android的半壁江山,试图摆脱Oracle。在桌面端原本一个jar跨平台运行的优势也被AWT和Swing的年久失修掩盖(隔壁C#也在摆烂就是了,两个动态语言在跨平台和开发便捷性上比不过用C++的Qt,国际笑话了属于是),JavaFX又半途而废踢出了JDK。二十年前,Sun如Sun中天时,Java坐拥从单片机到桌面软件和移动电话,再到服务器的全平台生态,应用开发语言遂归于一统,Sun和Java所到之处,开发者和用户竭诚欢迎,真可谓占尽天时。那种勃勃生机、万物竞发的境界,犹在眼前。短短二十年之后,竟然被Oracle玩的仅剩下服务端(还面对着Go,Python这样的对手)和若即若离的Andorid端。
蓝牙作为常用且重要的API,应当放到Java标准库中,或至少进javax
类库中。Oracle的确这么干了,提出了JSR-82方案,但Oracle在不做人这方面一直是不做人的,JSR-82方案有个小问题,它被设计成Java EE/ME专属,试图让用OpenJDK的开发者掏钱并融入Oracle的闭源小圈子。
雪上加霜的是蓝牙虽然应用广泛,但桌面端用蓝牙的场景实属不多,也没几个桌面端的第三方库,Kotlin/JVM要想使用蓝牙,只能用年久失修(上次更新: 2008年)的Bluecove
。它是javax.bluetooth
的开源实现,提供相同的API。可笑的是,由于Oracle的不做人,它甚至不能宣布这个事实。
使用Bluecove
在Gradle中添加依赖
implementation("io.ultreia:bluecove:2.1.1")
Bluecove的官方包名并不是这个,但官方包不支持64位系统,所以只能用第三方的包。
导入 javax.bluetooth
之后便可以使用JSR-82的API
import javax.bluetooth.*
使用javax.bluetooth
可以参考这篇文章: https://blog.csdn.net/pku_android/article/details/7430849