Kotlin
文章平均质量分 72
时空掠影
专注于软件技术服务
展开
-
局域网通信时,解决在一些设备上NsdManager发现服务失败的问题
Google 提供了NsdManager Api 以支持局域网发现服务,但是在实际中,一些个别型号手机设备上,NsdManager 发现服务失败,mdns 解析失败,找不到对应的服务名称,进而无法解析出本地网络内的host 和 端口。// 找到当前设备在局域网中的 IP 地址,以便用于本地通信、服务发现或其他网络相关操作。//此处对发现的服务进行过滤去重,获取到后,回调到UI线程去更新;// 过滤 IP 地址: 过滤ipv6地址,过滤回环的 IPv4 地址。// 需要再异步中开启发现服务。原创 2024-09-03 16:25:32 · 770 阅读 · 0 评论 -
Kotlin compose 实现Image 匀速旋转
Kotlin compose 实现Image 匀速旋转原创 2024-08-08 19:39:05 · 1095 阅读 · 0 评论 -
Canvas 实现四个扇形组成的圆,点击或触摸时,点在哪个扇形里,绘制扇形渐变背景色
1. 实现一个圆形;2. 在圆形上绘制4个扇形;3. 每个扇形点击时,是一种颜色;非点击时,是一种颜色;4.长按扇形时,出现长按的背景;原创 2024-08-08 19:28:29 · 1044 阅读 · 0 评论 -
NsdManager 发现两个服务,但是解析ip 和 port 的时候,只能解析一个,什么原因?
1. 将发现的服务添加到队列中等待解析。发现多个服务并尝试解析IP和端口时,只能解析一个服务。实例: 每个服务解析请求应该是自己独立的。2. 逐一解析服务: 避免同时解析多个服务,而是一个接一个地解析,确保上一个解析完成后再开始下一个。以上方式确保每次只解析一个服务,从而避免竞争条件和回调覆盖的问题。原创 2024-08-02 19:01:20 · 981 阅读 · 0 评论 -
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
1. 状态丢失:在某些情况下,如果应用程序在提交事务后被系统终止,可能会丢失一些状态或数据。2. 不一致的用户体验:由于状态可能丢失,用户可能会看到不一致的界面或操作,这可能会导致混淆或不良体验。之后尝试执行 Fragment 事务(如添加、移除或替换Fragment),这会导致状态丢失问题。总结: 根据实际情况选择合适的方法来确保Fragment事务在正确的生命周期内执行。3. 调试困难:由于状态丢失的问题在调试过程中可能不容易发现,因此使用。这会允许状态丢失,但要谨慎使用,因为可能会导致意外问题。原创 2024-07-31 17:16:18 · 996 阅读 · 0 评论 -
firebase- sdk 更新记录和 maven仓库
1. firebase-crashlytics maven 仓库对应的各种版本;2. Firebase Sdk 更新记录和对应的版本;原创 2024-07-30 14:21:21 · 207 阅读 · 0 评论 -
WiFi 局域网通信 - 发现服务和解析
1. nsdManager + NsdManager.DiscoveryListener + NsdManager.ResolveListener2. 在onStartDiscoveryFailed 和 onStopDiscoveryFailed里不要调用nsdManager.stopServiceDiscovery(this) 方法,会出现crash问题;//SERVICE_TYPE 为你自定义的服务名称,比如 const val SERVICE_TYPE = "_test-rct._tcp."原创 2024-07-28 17:09:38 · 1471 阅读 · 0 评论 -
DiscoveryListener 和 ResolveListener 的 异常 java.lang.IllegalArgumentException
1. 在调用 stopServiceDiscovery 的方法的时候, 监听器 NsdManager.DiscoveryListener没有被注册,即 没有调用 NsdManager 的 discoverServices方法,把监听器传进去。2. 两次或多次调用 stopServiceDiscovery 方法,在调用 stopServiceDiscovery 方法前,先判断是否注册了监听器,可用标志位自己实现,因为Android 系统没有提供判断监听器是否被注册的函数。先看crash 日志;原创 2024-07-24 16:02:38 · 349 阅读 · 0 评论 -
RecyclerView 滚动到指定position,且position所在的view 居屏幕中间显示
1. RecyclerView 滚动到指定position,且position所在的view 居屏幕中间显示;2. 自定义CenterSmoothScroller 实现LinearSmoothScroller;3. 自定义smoothScrollToPositionView的函数;4. 自定义scrollToPosition 函数,然后recyclerView.post;5. 立即滚动到指定位置原创 2024-07-23 14:13:58 · 972 阅读 · 0 评论 -
Android14 - 前台Service、图片选择器 、OpenJDK 17、其他适配
1. Android14适配 - 前台服务;2. Android14适配 - 图片选择器;3. Android14适配 - OpenJDK 17;4. Android14适配 - 动态代码加载;5. Android14适配 - 后台activity 启动处理Intent/Service的限制;6. Android14适配 - 压缩路径遍历;7. Android14适配 - MediaProjection 拍摄会话都需要征得用户同意;原创 2024-07-22 12:26:20 · 1679 阅读 · 0 评论 -
Android 14 适配之— BluetoothAdapter、JobScheduler、 Tiles
1. BluetoothAdapter 改动:2.JobScheduler 的改动;3.TileService#startActivityAndCollapse(Intent)原创 2024-07-20 23:28:45 · 666 阅读 · 0 评论 -
Android 14 适配之 - 隐式/显示 Intent 和 广播适配
Android 14 适配有很多方面,以上从 隐式/显示 Intent 打开组件 和 广播适配两个方面介绍适配方式。原创 2024-07-19 19:26:04 · 1073 阅读 · 0 评论 -
Android 14 适配之 - 全屏 intent 通知
Android 14 及之后变化,对于以 Android 14(API 级别 34)或更高版本为目标的应用,为获准使用此权限的App提供仅限于通话和闹钟两种。对于在用户更新到 Android 14 之前,在手机上已经安装的应用仍拥有此权限,用户可在设置里开启和关闭此权限。全屏 intent 通知 使用场景是 :需要用户立即注意的高优先级通知,例如用户来电或闹钟设置。在 Android 11(API 级别 30)中,任何应用都可以在手机处于锁定状态时使用。发送全屏 intent。启动设置页面,以此授予权限。原创 2024-07-19 17:58:42 · 858 阅读 · 0 评论 -
Shell 构建flutter + Android 生成Apk
以上是在Android 环境下,flutter 和 Android 混合开发,shell 打包Apk,并把Apk 上传到fir.im上的具体步骤;欢迎讨论和指正;原创 2024-07-19 10:39:31 · 1171 阅读 · 0 评论 -
Kotlin实现SHA-256哈希和RSA签名
0. 对一段原始字符串,用SHA 哈希签名1. 使用公钥钥key 对私钥签名的SHA-256哈希的字符串验证:2. hashMsg 是对原始字符串 SHA-256哈希后的字符串;3. 使用私钥key 对SHA-256哈希后的字符串签名;signedMessage 是私钥签名后的字符串;4. 用公钥key验证私钥签名的信息是否正确。原创 2024-07-18 18:50:15 · 760 阅读 · 0 评论 -
kotlin compose 实现应用内多语言切换(不重新打开App)
1. 在手机应用内实现语言切换;2.切换语言时,不需要重新打开应用;3.kotlin compose 实现UI组件;原创 2024-07-18 10:52:18 · 809 阅读 · 0 评论 -
kotlin 退出Activity 平滑动画
1. kotlin 退出Activity 平滑动画2. 在资源的动画文件夹即anim下创建两个文件,即 xxx_from_left 和 xxx_to_right。if (Build.VERSION.SDK_INT >= 34) {//34及以上的实现方式。} else {//34以下的实现方式。原创 2024-07-18 09:44:26 · 595 阅读 · 0 评论 -
retrofit2 + okhttp3 使用示例
*** 重写拦截器*/// 获取原始请求和Body// 新建新的FormBody builder// 获取原始请求体中的key和value.let {// 获取公共参数 示例// 增加公共参数 示例// 构建新的请求以上是使用 retrofit2 + okhttp3 的方式,快速实现Api 接口请求,非常简单实用,适用于常见的应用开发。原创 2024-07-17 19:06:20 · 817 阅读 · 0 评论 -
将.aab 文件转为.apks,然后本地命令安装;查看对应的签名信息
1. 将aab 文件转为apk,本地安装;查看apk签名信息;2. 下载bundletool-all-1.17.0.jar; 3. 使用bundletool提供的 bundletool-all-1.17.0.jarr 生成 .apks,可带release签名和不带;4. 安装.apks, 分为两种方式安装;原创 2024-07-17 14:54:37 · 1154 阅读 · 0 评论 -
设置TextView 渐变背景和字体渐变色
val spannable = SpannableString("文本内容")第二步:设置线性渐变,起始颜色和结束颜色。第一步:找到 TextView 的ID。第三步:设置textview的绘画阴影。第四步:设置textview。原创 2024-07-15 10:26:18 · 411 阅读 · 0 评论 -
https 单向认证和双向认证
双向认证,也称为双向SSL/TLS认证,是指客户端和服务器相互验证对方的身份:服务器向客户端提供数字证书,客户端也需要提供自己的数字证书供服务器验证;客户端不仅被动接收数据,还需要主动证明自己的身份;服务器验证客户端的公钥数字证书以确认与其连接的客户端是合法和可信的。单向认证是客户端(通常是浏览器)验证服务器的身份:服务器向客户端提供数字证书,客户端通过验证该证书的真实性以确认与服务器的连接是安全的。原创 2024-07-14 15:59:17 · 2066 阅读 · 0 评论 -
BottomNavigationView + ViewPager2 实现底部导航栏切换 + 自定义渐变
BottomNavigationView 的默认样式和行为是为标准使用场景设计的,如果需要进行深度定制,比如复杂的动画效果或不常见的布局,可能需要大量的代码来实现。BottomNavigationView 和 ViewPager2 的结合能够提供优秀的用户体验,同时简化开发过程,提高应用性能。原创 2024-07-14 15:14:27 · 896 阅读 · 0 评论 -
Compose实现横排(2.1显示)可滚动的图片
参考UI设计稿计算;比如宽度小于高度的情况下,以宽度作为等比例缩放点计算;反之,则以高度计算;适配各种屏幕宽度,2.1 张图片铺满整个宽度,可以横向滑动;原创 2024-07-12 18:36:16 · 649 阅读 · 0 评论 -
Compose实现滚动视图+指示器
【代码】Compose实现滚动视图+指示器。原创 2024-07-12 19:15:00 · 519 阅读 · 0 评论 -
用 RecyclerView 实现刻度尺或仪表盘功能
RecyclerView 实现刻度尺(或标尺)的功能原创 2024-07-09 18:58:54 · 983 阅读 · 0 评论 -
Webview支持视频播放
webView 支持渲染视频方式原创 2024-07-06 23:29:23 · 819 阅读 · 0 评论 -
kotlin 实现 webview 渲染视频 - 支持全屏播放,增加自定义返回键退出全屏
kotlin 实现 webview 渲染视频 支持全屏播放,增加自定义返回键退出全屏原创 2024-07-06 23:03:06 · 1439 阅读 · 0 评论