- 博客(43)
- 收藏
- 关注
原创 局域网通信时,解决在一些设备上NsdManager发现服务失败的问题
Google 提供了NsdManager Api 以支持局域网发现服务,但是在实际中,一些个别型号手机设备上,NsdManager 发现服务失败,mdns 解析失败,找不到对应的服务名称,进而无法解析出本地网络内的host 和 端口。// 找到当前设备在局域网中的 IP 地址,以便用于本地通信、服务发现或其他网络相关操作。//此处对发现的服务进行过滤去重,获取到后,回调到UI线程去更新;// 过滤 IP 地址: 过滤ipv6地址,过滤回环的 IPv4 地址。// 需要再异步中开启发现服务。
2024-09-03 16:25:32
1301
原创 Canvas 实现四个扇形组成的圆,点击或触摸时,点在哪个扇形里,绘制扇形渐变背景色
1. 实现一个圆形;2. 在圆形上绘制4个扇形;3. 每个扇形点击时,是一种颜色;非点击时,是一种颜色;4.长按扇形时,出现长按的背景;
2024-08-08 19:28:29
1337
原创 NsdManager 发现两个服务,但是解析ip 和 port 的时候,只能解析一个,什么原因?
1. 将发现的服务添加到队列中等待解析。发现多个服务并尝试解析IP和端口时,只能解析一个服务。实例: 每个服务解析请求应该是自己独立的。2. 逐一解析服务: 避免同时解析多个服务,而是一个接一个地解析,确保上一个解析完成后再开始下一个。以上方式确保每次只解析一个服务,从而避免竞争条件和回调覆盖的问题。
2024-08-02 19:01:20
1224
1
原创 java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
1. 状态丢失:在某些情况下,如果应用程序在提交事务后被系统终止,可能会丢失一些状态或数据。2. 不一致的用户体验:由于状态可能丢失,用户可能会看到不一致的界面或操作,这可能会导致混淆或不良体验。之后尝试执行 Fragment 事务(如添加、移除或替换Fragment),这会导致状态丢失问题。总结: 根据实际情况选择合适的方法来确保Fragment事务在正确的生命周期内执行。3. 调试困难:由于状态丢失的问题在调试过程中可能不容易发现,因此使用。这会允许状态丢失,但要谨慎使用,因为可能会导致意外问题。
2024-07-31 17:16:18
1242
原创 firebase- sdk 更新记录和 maven仓库
1. firebase-crashlytics maven 仓库对应的各种版本;2. Firebase Sdk 更新记录和对应的版本;
2024-07-30 14:21:21
437
原创 OAuth 2.0 介绍和使用示例
OAuth 2.0 是一种开放标准授权协议,用于安全地让第三方应用访问用户在另一个服务上的资源,而无需暴露用户的凭证。OAuth 2.0 主要用于 Web 应用程序、桌面应用程序、移动应用程序和物联网设备等场景。
2024-07-29 19:15:55
1354
原创 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
1726
原创 JWT(JSON Web Token)
JWT(JSON Web Token)是一种用于在各方之间作为 JSON 对象安全地传输信息的紧凑、URL 安全的方式。JWT 由于其紧凑和自包含的特点,非常适合于在移动设备等资源受限的环境中使用。
2024-07-26 17:38:10
1156
原创 GPT-4o mini 优势和性能有哪些
GPT-4o mini 的设计目标是在保持高效性能的同时,提供强大的自然语言处理能力,使其成为一种经济实惠且灵活的解决方案。GPT-4o mini 是 OpenAI 开发的一种较小的语言模型版本,旨在提供高效的自然语言处理能力,同时减少计算资源的需求。
2024-07-25 18:56:15
990
原创 DiscoveryListener 和 ResolveListener 的 异常 java.lang.IllegalArgumentException
1. 在调用 stopServiceDiscovery 的方法的时候, 监听器 NsdManager.DiscoveryListener没有被注册,即 没有调用 NsdManager 的 discoverServices方法,把监听器传进去。2. 两次或多次调用 stopServiceDiscovery 方法,在调用 stopServiceDiscovery 方法前,先判断是否注册了监听器,可用标志位自己实现,因为Android 系统没有提供判断监听器是否被注册的函数。先看crash 日志;
2024-07-24 16:02:38
589
原创 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
2206
原创 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
2098
原创 Android 14 适配之— BluetoothAdapter、JobScheduler、 Tiles
1. BluetoothAdapter 改动:2.JobScheduler 的改动;3.TileService#startActivityAndCollapse(Intent)
2024-07-20 23:28:45
1066
原创 Android 14 适配之 - 隐式/显示 Intent 和 广播适配
Android 14 适配有很多方面,以上从 隐式/显示 Intent 打开组件 和 广播适配两个方面介绍适配方式。
2024-07-19 19:26:04
1752
原创 Android 14 适配之 - 全屏 intent 通知
Android 14 及之后变化,对于以 Android 14(API 级别 34)或更高版本为目标的应用,为获准使用此权限的App提供仅限于通话和闹钟两种。对于在用户更新到 Android 14 之前,在手机上已经安装的应用仍拥有此权限,用户可在设置里开启和关闭此权限。全屏 intent 通知 使用场景是 :需要用户立即注意的高优先级通知,例如用户来电或闹钟设置。在 Android 11(API 级别 30)中,任何应用都可以在手机处于锁定状态时使用。发送全屏 intent。启动设置页面,以此授予权限。
2024-07-19 17:58:42
2172
原创 Shell 构建flutter + Android 生成Apk
以上是在Android 环境下,flutter 和 Android 混合开发,shell 打包Apk,并把Apk 上传到fir.im上的具体步骤;欢迎讨论和指正;
2024-07-19 10:39:31
1452
原创 Shell 构建flutter + Navtive 生成IPA
在build_iOS 文件夹配置打包的DEVELOPExportOptionsPlist.plist(dev 构建)或AppStoreExportOptionsPlist.plist(Release 构建)或ADHOCExportOptionsPlist.plist(adhoc 构建),plist文件先用Xcode打包,取出对应的plist,按以上重命名plist文件后,copy进build_iOS文件夹;"~~~~~~~~~~~~选择打包方式(输入序号)~~~~~~~~~~~~~~~"
2024-07-18 19:06:46
1100
原创 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
1106
原创 生成式 AI 的发展方向 - 是 Chat 还是 Agent
随着生成式AI技术的迅速进步,其应用领域和潜在影响力变得越来越广泛和深远。未来,生成式AI的整体发展方向可以概括为以下几个关键方面:。核心目标:Chat:旨在实现自然、人性化的语言交互。Agent:旨在自主决策和任务执行。技术侧重:Chat:侧重于NLP技术、对话管理和多模态交互。Agent:侧重于强化学习、任务规划和环境感知。应用场景:Chat:广泛应用于客服、教育、娱乐等领域的交互任务。Agent:应用于自动驾驶、机器人、智能系统等需要自主行动的任务。
2024-07-18 14:35:29
630
原创 生成式 AI 的发展方向,是 Chat 还是 Agent?
Agent将实现更高级别的自主决策和任务执行能力,具备更强的环境感知和自适应能力,并确保在复杂任务中的安全性和可靠性。2.上下文理解:使用长短期记忆(LSTM)、门控循环单元(GRU)、BERT、GPT等模型来理解和生成上下文相关的对话。3.多轮对话:利用对话状态跟踪(DST)和对话管理(DM)技术,实现多轮对话的逻辑和流畅性。5.多模态交互:集成语音识别、语音合成、图像识别等技术,实现文本、语音、图像的综合处理。3. 环境感知:利用传感器融合、计算机视觉、环境建模等,实现对环境的全面感知和理解。
2024-07-18 14:20:37
829
原创 kotlin compose 实现应用内多语言切换(不重新打开App)
1. 在手机应用内实现语言切换;2.切换语言时,不需要重新打开应用;3.kotlin compose 实现UI组件;
2024-07-18 10:52:18
1576
原创 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
812
原创 retrofit2 + okhttp3 使用示例
*** 重写拦截器*/// 获取原始请求和Body// 新建新的FormBody builder// 获取原始请求体中的key和value.let {// 获取公共参数 示例// 增加公共参数 示例// 构建新的请求以上是使用 retrofit2 + okhttp3 的方式,快速实现Api 接口请求,非常简单实用,适用于常见的应用开发。
2024-07-17 19:06:20
996
原创 Insufficient text color contrast ratio
1.你的 Android 应用中的按钮(AppCompatButton)的文本颜色与背景颜色之间的对比度不足;这种对比度不足会影响可访问性,使视力受损的用户难以阅读文本。使用对比度检查工具(例如 WebAIM contrast checker)计算当前对比度。修改文本颜色或背景颜色,以达到更高的对比度。大字体文本(18pt 及以上,或 14pt 加粗及以上):对比度至少为 3:1。在你的 XML 布局文件或代码中,更新按钮的文本颜色和背景颜色。找出按钮的当前文本颜色和背景颜色。
2024-07-17 15:03:19
2079
原创 将.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
2443
原创 D-U-N-S编号-邓白氏编码查询
3.查询链接:https://developer.apple.com/enroll/duns-lookup/#!2. 简单的方式,在苹果开发者账号查询,苹果会把邓白氏码发送到指定的邮箱;1. Google 开发者认证需要验证邓白氏码;
2024-07-15 20:09:46
3799
原创 设置TextView 渐变背景和字体渐变色
val spannable = SpannableString("文本内容")第二步:设置线性渐变,起始颜色和结束颜色。第一步:找到 TextView 的ID。第三步:设置textview的绘画阴影。第四步:设置textview。
2024-07-15 10:26:18
1260
原创 https 单向认证和双向认证
双向认证,也称为双向SSL/TLS认证,是指客户端和服务器相互验证对方的身份:服务器向客户端提供数字证书,客户端也需要提供自己的数字证书供服务器验证;客户端不仅被动接收数据,还需要主动证明自己的身份;服务器验证客户端的公钥数字证书以确认与其连接的客户端是合法和可信的。单向认证是客户端(通常是浏览器)验证服务器的身份:服务器向客户端提供数字证书,客户端通过验证该证书的真实性以确认与服务器的连接是安全的。
2024-07-14 15:59:17
2617
原创 BottomNavigationView + ViewPager2 实现底部导航栏切换 + 自定义渐变
BottomNavigationView 的默认样式和行为是为标准使用场景设计的,如果需要进行深度定制,比如复杂的动画效果或不常见的布局,可能需要大量的代码来实现。BottomNavigationView 和 ViewPager2 的结合能够提供优秀的用户体验,同时简化开发过程,提高应用性能。
2024-07-14 15:14:27
1304
原创 Compose实现横排(2.1显示)可滚动的图片
参考UI设计稿计算;比如宽度小于高度的情况下,以宽度作为等比例缩放点计算;反之,则以高度计算;适配各种屏幕宽度,2.1 张图片铺满整个宽度,可以横向滑动;
2024-07-12 18:36:16
828
原创 mDNS 介绍及代码示例
mDNS(Multicast DNS)是一种通过使用多播协议在本地网络中进行主机名解析的协议。它的设计使设备可以在没有中央DNS服务器的环境中自动发现和解析设备的主机名。以下是详细的工作原理和代码示例。值得一提的是,通过查询而非直接广播,mDNS 设计能够有效减少网络负载、节约资源、提高通信效率、增强安全性、管理冲突和干扰,同时更适应动态网络环境。使得 mDNS 成为小型网络和物联网环境中自动发现和解析主机名的理想解决方案。
2024-07-12 11:30:47
3962
原创 自定义搜索框
kotlin compose 自定义搜索框 /清除内容的x图标 R.mipmap.search_clear。modifier = if (hasFocus) { //有焦点处边框改变。//搜索图标 search_img。* onSearchCompleted 搜索完成回调。* colorBorder 边框线的颜色。
2024-07-12 11:03:20
799
原创 防止API请求重复攻击
在 API 设计中,防止请求重复攻击是确保系统安全性和稳定性的关键部分。以下是一些有效的技术和策略来防止 API 请求的重复攻击。
2024-07-10 19:13:53
1903
WiFi 局域网通信 + nsd + mdns+ socket
2024-07-28
1. wifi 局域网通 示例;2. 发现本地局域网服务; 3. 建立本地局域网scoket连接;4.建立连接,发送数据包;
2024-07-28
Shell 构建flutter + Navtive 生成APK 脚本
2024-07-19
1. 涉及Bass, Saas, Pass ,云原生等示例的逻辑架构图;2. 维护逻辑架构图-用户,应用、数据、感知
2024-07-18
openCV手势识别-iOS 示例demo; 包括openCv 原生代码,调用接口示例,识别结果示例
2024-07-09
openCV 手势识别完整demo,包含cv 原生代码,调用接口,示例说明,各种手势识别设置,内置测试数据模型
2024-07-09
Kotlin (compose)实现 webView 渲染视频,支持全屏;实现H5 返回时,一级一级返回
2024-07-07
多语言翻译 - 从Excel 中 批量转为xml 格式
2024-07-07
Shell 构建flutter + Navtive 生成IPA
2024-07-19
AccessToken 刷新流程图和具体示例
2024-07-18
Docker的主要命令和结构示意图
2024-07-18
kotlin compose 实现 webView 加载视频,支持Webview 全屏及退出全屏
2024-07-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅