- 博客(606)
- 资源 (5)
- 收藏
- 关注
转载 Android 标准语音识别框架:SpeechRecognizer 的封装、调用和原理
fun init()最后我们结合一张图整体了解一下需要语音识别的 App 通过发送Request在发起识别的时候通过告知 SystemServer 的系统服务,去中获取默认的 Recognition 服务包名并不直接负责绑定,而是交由调度则是交给专门绑定和管理通过和具体的识别服务进行交互则会通过 Handler 切换到主线程,调用识别 engine 开始处理识别请求,并通过 Callback 内部类完成识别状态、结果的返回后续则是通过将结果传递至,以及进一步抵达发出请求的 App 源头。
2024-09-23 16:35:08 356
转载 直面原理:5 张图彻底了解 Android TextToSpeech 机制
关于语音方面的交互,Android SDK 提供了用于语音交互的机制、语音识别的接口、语音播报的 TTS 接口。前者已经介绍过,本次主要聊聊第 3 块即 TTS,后续会分析下第 2 块即 Android 标准的 Recognition 机制。通过机制,任意 App 都可以方便地采用系统内置或第三方提供的 TTS Engine 进行播放铃声提示、语音提示的请求,Engine 可以由系统选择默认的 provider 来执行操作,也可由 App 具体指定偏好的目标 Engine 来完成。
2024-09-23 16:34:31 179
转载 如何打造车机语音交互:Google Voice Interaction 给你答案
语音交互并不是一个新事物,它已经存在很长时间。例如,Apple 设备的 Siri、Amazon 的 Alexa、Google 的 Google Assistant 等等。这些系统大多是内置服务,由热词唤醒或按键触发,之后只通过语音指令即可完成完整的交互。然而,这些交互场景往往覆盖了系统服务或系统 App,而对第三方 App 的支持有限,或者鲜少针对第三方 App 完成完整的语音交互逻辑。第三方 App 除了被动等待系统语音服务的调度,当然可以选择主动支持。
2024-09-23 15:22:54 136
原创 Kotlin Serialization 简介及使用指南
将对象转换为二进制数据或文本数据,便于存储或传输。将存储或传输中的数据还原为内存中的对象。通过在数据类上使用注解,我们告知 Kotlin 编译器需要为该类生成相应的序列化器和反序列化器。在某些场景下,可能需要自定义序列化规则。!通过,我们可以将Date类型正确地序列化和反序列化为字符串。有时候我们需要处理一些特殊的数据类型或自定义的序列化规则。比如,日期时间对象、加密数据等,Kotlin Serialization 没有提供直接支持,此时可以通过自定义序列化器来处理这些场景。
2024-09-23 14:44:03 7
原创 如何使用Claude进行Android App开发 —— 基于Jetpack和Compose的电影App实例
通过结合Claude、Jetpack和Jetpack Compose,开发者可以显著提高Android App开发的效率。Claude的智能代码生成和建议功能让开发过程更加快捷,而Jetpack和Compose提供了强大的基础设施,帮助开发者构建高性能、响应式的应用界面。在电影App的开发过程中,Claude不仅加速了代码生成,还能够提供有价值的优化建议,使得开发更加顺畅和高效。借助AI和现代化工具的结合,Android开发正变得更加智能和便捷,开发者可以将更多精力放在应用的核心功能和用户体验上。
2024-09-21 17:08:30 879
原创 Android Tools | 如何使用Draw.io助力Android开发:从UI设计到流程优化
在Android开发中,视觉化设计与流程管理至关重要。虽然开发工具如Android Studio强大,但它并不适用于所有设计场景。Draw.io是一款免费的在线绘图工具,特别适合开发者进行原型设计、流程图绘制和系统架构规划。它能够帮助开发者在项目早期阶段有效地规划应用结构和逻辑流程,从而减少开发中的复杂性和错误。
2024-09-12 11:05:27 1631
原创 Framework |Android.bp语法
与传统的Makefile不同,Android.bp文件是声明式的,因此没有直接的变量赋值功能。但Soong支持常量定义,常常用于减少重复配置。在一些特定的场景中,可能需要自定义构建步骤。这时可以使用genrule模块,通过执行自定义脚本生成构建文件。例如,我们可以用genrulegenrule {在这个例子中,genrule会调用Python脚本生成一个头文件,并将其作为构建过程中的输入文件。Android.bp文件的引入极大地提升了AOSP项目的可扩展性和可维护性。
2024-09-12 09:43:37 161
原创 Framework | 在Android中运行时获取顶层Activity并处理业务逻辑
在本文中,我们介绍了如何在Android中通过Service后台获取顶层Activity并进行业务处理。这个方法主要依赖于的方法来获取任务栈中的顶层Activity信息。虽然这种方式在Android 5.0之后受到了限制,但它仍然适用于特定的应用场景。开发者应当注意系统版本的兼容性,并根据具体需求调整实现方案。
2024-09-12 09:43:07 399
原创 Framework | Android语音识别框架与语音交互概览
Android语音识别框架由多个核心组件构成,主要包括和及等。它们共同构建了一个复杂而高效的语音识别和交互体系。Android 平台的语音识别与交互框架整合了多个关键组件,为开发者提供了实现高效、自然语音交互的工具。TTS技术将文本转换为语音,使应用能够为用户提供自然的语音反馈,在导航、无障碍服务和语音助手中发挥重要作用。开发者可以通过 Android 内置的 TTS 引擎实现多语言支持、音调和语速调节,并将合成语音保存为音频文件,适应不同应用场景的需求。
2024-08-30 12:12:14 644
原创 还在担心Android功能不会用吗?Intro Showcase View助你快速实现功能引导
你可以使用自定义引导文本的样式,如改变文本颜色、背景等。val primaryText = SpannableStringBuilder("发送你的第一封邮件")val secondaryText = SpannableStringBuilder("点击信封图标开始撰写你的第一封邮件").show()通过上述示例,你可以灵活地在 Android 应用中实现不同场景下的功能引导,从简单的视图引导到复杂的 RecyclerView 卡片引导,再到自定义文本样式,这些都能极大地提升用户体验。
2024-08-14 12:25:14 408
原创 Framework | 如何配置系统App在Android Studio下的环境?
为了系统App开发调试方便,避免权限障碍,我们将平台签名转成.jks格式的签名文件,这样通过gradle编译的apk直接有了系统签名,运行到设备后直接作为平台应用安装。
2024-08-14 09:34:26 386
原创 一库搞定多平台分页:Paging-Multiplatform让开发变简单!
Paging-Multiplatform通过为AndroidX Paging增加更多的Kotlin/Multiplatform目标,并为iOS提供UI组件,使得跨平台分页变得更加简单和高效。如果你正在开发一个需要在多个平台上共享分页逻辑的应用程序,不妨试试Paging-Multiplatform,它会让你的开发过程变得轻松愉快!不管你是安卓大佬还是iOS大神,Paging-Multiplatform都能让你在分页的海洋中如鱼得水,快来试试吧!
2024-07-31 10:35:20 167
原创 Android Compose 中的 UI 状态魔法:优雅处理加载、空状态和数据展示
在Jetpack Compose中处理UI界面状态的这种情况,我们可以使用一个密封类(sealed class)来表示不同的UI状态,然后根据状态来显示相应的UI。这种方法提供了一个清晰和可扩展的方式来管理UI状态,使得添加新的状态或修改现有状态变得简单。同时,它也符合Jetpack Compose的声明式UI设计理念。
2024-07-31 10:34:32 246
原创 在 Android 上实现语音命令识别:详细指南
语音命令识别是一项复杂的技术,但通过 Android 提供的 API,我们可以相对轻松地实现这项功能。本指南将从基本实现开始,逐步介绍如何处理更复杂的语音命令。处理复杂的语音命令时,我们通常会遇到带有占位槽位的命令,例如 “播放歌曲 {song_name}” 或 “设置闹钟在 {time}”。首先,我们需要定义这些命令模板。"播放歌曲 {song_name}","设置闹钟在 {time}"
2024-07-23 14:38:47 444
原创 使用Kotlin Flow和协程开发高性能Android应用
Kotlin Flow和协程为Android开发者提供了一种高效处理异步任务和数据流的方式。通过合理使用这些工具,我们可以显著提升应用的性能和用户体验。在实际开发中,我们需要根据业务需求选择合适的策略和操作符,同时遵循最佳实践,避免常见的性能问题和内存泄漏。希望这篇文章能为你在Kotlin Flow和协程的使用上提供一些启示和帮助。未来,我们可以继续探索更多高级特性和优化策略,为用户提供更出色的应用体验。
2024-07-19 16:39:02 670
原创 基于Jetpack Compose实现的Android Preference
基础组件,并根据不同类型的 Preference 需求进行了扩展。您可以根据实际需要进一步调整和优化这些组件。这样,您就可以创建一个功能丰富的设置界面,包含各种类型的 Preference。这些实现都基于您提供的。
2024-07-11 09:26:36 388
原创 实现Android夜间模式主题:从入门到精通
随着用户对夜间模式的需求越来越高,Android开发者需要掌握如何在应用中实现夜间模式。本文将详细介绍在Android中实现夜间模式的步骤,包括配置、实现、以及一些最佳实践,帮助开发者创建更具吸引力和用户友好的应用。
2024-07-11 09:13:57 414
原创 探索Google AI Studio的无限可能:从设计到代码的全新体验
在2024年的Google I/O开发者大会上,Google展示了一项令人兴奋的实时演示:Gemini能够将应用程序UI的线框草图转换为Jetpack Compose代码,直接在Android Studio中进行。这一功能基于Gemini的核心能力,虽然我们仍在不断优化这个功能以确保在Android Studio中的优秀体验,但你今天就可以在Google AI Studio中尝试这些基础功能。
2024-07-09 14:59:33 467
原创 299k stars利用Public APIs提升开发效率:探索APILayer提供的开源资源
APILayer是一家致力于提供快速、可靠API集成服务的公司。他们创建了一个包含各种公共API的开源项目,旨在帮助开发者轻松找到并使用这些API。这些API已在Postman API Network中进行了整理和展示,开发者可以直接在Postman中查看和测试。公共API为开发者提供了宝贵的资源,可以轻松集成各种服务到应用中。APILayer提供的公共API项目不仅涵盖了多种实用功能,还通过Postman API Network提供了便捷的测试环境。
2024-07-09 10:09:11 1771
原创 在Android运行时切换Retrofit Base URL:简化开发环境与生产环境的切换
通过以上步骤,我们实现了在运行时动态切换Retrofit Base URL的功能。这种方法不仅简化了环境切换操作,还避免了维护多个Retrofit实例的繁琐工作。值得注意的是,这种环境切换主要适用于开发和调试阶段,因为所有请求都会经过这个Interceptor,可能会影响请求速度。希望本文能为您在项目中实现动态切换Base URL提供帮助。如果有任何问题或建议,欢迎交流与讨论。
2024-07-03 09:32:15 494
原创 快速构建轻量级虚拟机:深入探索 Multipass
Multipass 是 Canonical 推出的轻量级虚拟机管理工具,专为快速创建和管理 Linux 实例而设计。与传统的虚拟机软件不同,Multipass 更加轻量,只需一行命令便可快速创建 Ubuntu 虚拟机,非常适合开发和测试使用。
2024-07-03 09:09:21 1083
原创 在Linux上运行macOS:深度解析OSX-KVM项目
OSX-KVM项目通过QEMU和KVM技术,实现了在现代Linux发行版上运行macOS的能力。该项目支持OpenCore引导器,并兼容Monterey、Ventura以及最新的Sonoma版本。对于需要在Linux环境中使用macOS的开发者,OSX-KVM提供了一种高效且可行的方案。
2024-07-03 09:08:58 1954
原创 深度解析Ubuntu版本升级:LTS版本升级指南
Ubuntu是全球最受欢迎的Linux发行版之一,其版本升级与维护策略直接影响了无数用户的开发和生产环境。Canonical公司为Ubuntu制定了明确的生命周期和发布节奏,使得社区、企业和开发者可以在计划路线图时充分享受到最新的开源能力。
2024-07-03 09:08:32 5046
原创 提升Android Studio开发体验:使用Kelp插件实现颜色和图标预览
Kelp插件是一款功能强大的工具,旨在为Android Studio添加各种增强功能,改善开发者体验。自动补全中的暗色和亮色预览 🎨自动补全中的图标预览 🔍组件函数的可自定义图标可在Git中存储和共享的Live Templates ⌨️KDoc图像渲染等Kelp插件为Android Studio带来了诸多强大功能,极大地提升了开发体验。通过本文介绍的方法,您可以轻松设置颜色和图标预览功能,并在设计系统组件中添加预览图标。
2024-07-03 09:07:21 1632 3
原创 在Ubuntu上配置PPPoE服务:从安装到自动化启动的全指南
PPPoE(点对点协议以太网)是一种广泛用于DSL和光纤宽带连接的协议。在本篇技术博客中,我们将详细介绍如何在Ubuntu系统上配置PPPoE服务,包括安装、配置、启动以及设置自动启动等步骤。
2024-06-29 15:10:18 2246
原创 使用Jetpack Compose实现具有多选功能的图片网格
在现代应用中,多选功能是一项常见且重要的需求。例如,Google Photos允许用户轻松选择多个照片进行分享、添加到相册或删除。
2024-06-29 00:01:23 1142
原创 GitHub Pull Request流程详解
Pull Request是一种让开发者提交代码更改的方式,它不仅能让团队成员审查代码,还能确保代码质量和一致性。在PR中,开发者可以讨论更改、提供反馈、运行自动化测试,并最终将更改合并到主代码库中。GitHub的Pull Request是协作开发的核心工具之一,通过这一流程,开发者可以有效地管理代码更改、保证代码质量并促进团队协作。希望这篇文章能帮助你更好地理解和使用Pull Request,提高你的开发效率。
2024-06-29 00:00:50 761
原创 深入解析Android的Sound Trigger中间件架构
在现代移动设备中,应用程序对声音事件的检测需求越来越多,如热词检测和背景音乐识别等。为了实现低功耗和隐私敏感的声音事件检测,Android引入了Sound Trigger中间件。本文将详细介绍Sound Trigger的架构、工作原理以及其在不同层次中的职责。
2024-06-29 00:00:29 411
原创 Drag Select Compose:实现多平台图片多选功能的利器
Drag Select Compose库使我们能够轻松实现复杂的图片多选功能,同时支持多种平台。通过该库,我们不仅可以简化开发流程,还可以为用户提供流畅的交互体验。希望通过这篇博客,您能更好地理解和应用这一强大的工具。了解更多信息,请访问Drag Select Compose文档。
2024-06-29 00:00:07 929
原创 使用 Compose Multiplatform Media Player 实现跨平台媒体播放
为了提供更好的用户体验,Compose Multiplatform Media Player 提供了广泛的控制选项供开发者自定义。您可以启用或禁用暂停和恢复功能,调整进度条的外观和可见性,以及自定义各种控制图标和颜色。这些选项使得您可以根据应用的具体需求来调整播放器的行为和外观,从而提供更符合用户期望的媒体播放体验。使用使用使用。
2024-06-28 23:59:05 1184
原创 Kotlin设计模式:代理模式详解
在软件开发中,设计模式是解决常见问题的一种优雅方法。本文将介绍Kotlin中的代理模式(Proxy Pattern),其应用场景,以及如何通过实例代码实现这一模式。代理模式是对一个对象的封装,它在幕后提供额外的逻辑支持。这意味着代理模式可以为目标对象提供额外的访问控制。代理对象和实际对象实现相同的接口,这种模式通常在需要额外的访问控制时使用。代理对象和实际对象都实现相同的接口,这种模式通常与服务(Service)一起使用。假设我们需要创建一个聊天应用。你提供了一个API来发送和接收消息。然而,聊天需要是安
2024-06-25 10:01:57 1051
原创 Kotlin设计模式:深入解析Facade模式
Facade模式提供了一个高层次的接口,使得子系统的使用变得更加简单。通过引入一个外观对象,隐藏系统内部的复杂性,客户端只需与这个高层次的接口交互,而不需要了解系统的内部细节。
2024-06-25 10:01:38 513
原创 Kotlin设计模式:深入理解桥接模式
首先,我们定义一个Material接口,并创建两个实现类Wood和Metal。接下来,我们定义一个Furniture接口,并创建两个实现类Chair和Table,它们使用不同的材料来建造。
2024-06-25 10:01:18 761
原创 Kotlin设计模式:工厂方法详解
工厂方法模式在Kotlin中的应用非常广泛,它通过将对象创建的责任委派给工厂方法,简化了对象创建的复杂性,提高了代码的可维护性和扩展性。在实际开发中,使用工厂方法模式可以有效地管理对象的创建逻辑,避免重复代码,并使代码更具弹性和灵活性。通过本文的讲解和示例代码,希望大家能够更好地理解和应用工厂方法模式,提升Kotlin开发的效率和质量。
2024-06-25 10:01:00 1131
原创 Kotlin设计模式:享元模式(Flyweight Pattern)
在移动应用开发中,内存和CPU资源是非常宝贵的。享元模式(Flyweight Pattern)是一种设计模式,旨在通过对象重用来优化内存使用和性能。本文将深入探讨享元模式的应用,并通过Kotlin代码示例展示其实现方式。
2024-06-24 17:00:10 680
原创 摒弃反模式:使用Kotlin委托优化Android BaseActivity
BaseActivity”或“BaseFragment”这类命名模式从一开始就是一种反模式。这类基类通常包含了多种职责,使得代码难以维护和扩展。职责不明确:命名应明确反映类的职责,而“BaseActivity”这种命名模糊不清,无法表明类的实际功能。职责混杂:一个基类往往包含多种职责,使得子类难以理解和修改。继承层次复杂:当项目规模增大时,复杂的继承层次会导致代码难以维护。
2024-06-24 16:59:48 1004
原创 使用Jetpack Compose为Android App创建自定义页面指示器
下面的代码示例展示了如何创建一个水平分页器,并为其添加一个页面指示器。页面指示器提供视觉提示,显示总页数以及当前页的位置。
2024-06-21 16:42:09 1002 1
原创 使用Jetpack Compose创建自定义可滚动网格
通过使用Jetpack Compose中的和,开发者可以轻松创建高效、灵活的可滚动网格布局。这些组合不仅简化了代码,还提高了应用的性能和用户体验。无论是展示大量数据还是动态内容,这些工具都能满足需求。希望本篇博客能够帮助您在实际项目中更好地运用Jetpack Compose创建自定义网格布局。如果您有任何问题或建议,欢迎在评论区交流讨论。
2024-06-21 16:41:49 417
原创 Java 从 6 到 21 的重要变动回顾
Java 21 引入了众多重要的新特性和改进,进一步提升了 Java 语言的表达能力和性能。记录模式和虚拟线程的引入,使得代码更加简洁和高效;改进的外部函数和内存 API 提高了与本地代码的互操作性;模式匹配 switch 和增强的线程调度机制使得 Java 的并发编程更加强大和灵活。这些新特性为开发者提供了更丰富的工具,帮助他们应对复杂的编程挑战。通过上述示例代码,希望能帮助开发者更好地理解和应用 Java 21 的新特性。未来,Java 将继续发展,为我们带来更多的创新和改进。
2024-06-21 16:41:12 1101
wifi_display_doc.zip
2020-10-20
DLNA协议Android端实现,包括DMR, DMC,DMS
2018-03-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人