Android

分类下相关文章

Android SQLDelight (三) 查询数据并借助 Flow 更新到 RecyclerView

周五晚上直到 11 点也没有调通 Android SQLDelight Flow 的用法,由于周六早上 5 点半就要起床去参加运动会,所以就此作罢。今天去体育场路途遥远,于是路上查了一堆文档,才理清了思路。晚上回来,终于调通。 build.gradle 配置 dependencies { implementation "app.cash.sqldelight:coroutines-extensions:2.0.0-alpha05" } RecyclerView 监听数据变化 lifecycleScope.launch(Dispatchers.IO) { (activ ...

阅读全文...

Android SQLDelight (二) 向本地 SQLite 数据库插入数据

首先需要 在 Android 中配置好 SQLDelight 及数据库初始化,然后就可以测试写入数据了。 .sq 在 SQLDelight 的 sq 文件中补充用于插入的 SQL 语句: 一个用于插入 一个用于保存 save: INSERT OR REPLACE INTO items VALUES ?; insert: INSERT INTO items(name, num, notes) VALUES (?, ?, ?); 这里有个不好的习惯,就是表名用了复数,会导致生成的 kotlin data class 类名也是复数形式,影响代码可读性。 为了兼容旧版本的 app,所以没有改正 ...

阅读全文...

Android SQLDelight (一) 配置及数据库初始化

SQLDelight 官方的文档有点简略,有些步骤看不懂,而网上找到的大部分文章都是跨平台的配置, 而我只想做 Android 单平台的,于是详细记录了一下配置过程。 app build.gradle 注意是 app 模块的 build.gradle, 而不是整个项目的 build.gradle. plugins { id "app.cash.sqldelight" version "2.0.0-alpha05" } sqldelight { databases { Database { // This will be the name ...

阅读全文...

Android SQLDelight (六) 查看 Android Room 创建的 SQLite 数据库建表语句

为了将一个 Android App 由 Room 迁移到 SQLDelight 方案,首先需要了解既有 app 的表结构。 使用 Android Studio 自带的 App Inspection 将 Room 创建的 SQLite 数据库导出为 db 文件, 如 item_database.db。 打开 db 文件 使用 sqlite3 命令连上数据库文件,查看具体表的建表语句 sqlite3 item_database.db 注意是 sqlite3,而不是 sqlite. 否则会报错: > sqlite item_database.db Unable to open databa ...

阅读全文...

Android Studio 解决 Gradle 编译失败 Unsupported class file major version 61

今天在编译一个 2021 年写的一个 Jetpack Compose 应用时,报错: Unsupported class file major version 61 Android Studio 版本 Android Studio Flamingo 2022.2.1 Patch 1 报错原因 新版本的 AS 默认使用的是 Java 17 LTS,而这个历史项目的 Gradle 版本很低,不支持高版本的 Java。 具体原因是: Java 17 (major version 61) 编译的 class 文件,如果在 Java 16 及以下环境下运行,就会报错 Unsupported cla ...

阅读全文...

jetpack compose,xml layout 与 flutter 的选型问题

这个周末无论是去公司团结的路上,还是一家去永旺吃饭的间隙,我都在纠结这个事情。也是用这些零碎的时间片段在手机上整理了这篇笔记。 纠结的原因 计划将一个一年前用 jetpack compose 写的练手 android app 重构一下。没想到在没有任何推广,维护的情况下,积累了一些用户。 重构的原因是,有一些用户反馈的需求,我想实现一下。但是使用的 jetpack compose 版本太旧了,毕竟 compose 还处于飞速发展解决,一年一个新样子,甚至今年都成了 android studio 的默认模板。今年用新版本的 as 编译,一堆错误,甚至提示 kotlin 的版本都过低。导致没法继续 ...

阅读全文...

新版本 Android Studio settings.gradle 中切换国内源

从 Android Studio Dolphin 2021.3.1 之后,国内源的切换配置就从 build.gradle 文件改到了 settings.gradle 文件。 修改之后,执行一下 Sync 就可以了。 具体配置 pluginManagement { repositories { maven { url 'https://plugins.gradle.org/m2/' } maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' } mav ...

阅读全文...

Android Studio flamingo 使用 jetpack compose 模板新建项目

今天将 Android Studio 升级到了最新版本 Android Studio Flamingo 2022.2.1 Patch 1。 但是新建项目的时候发现找不到 Jetpack Compose 的模板选项了,印象中之前版本是明确标注了哪些模板是基于 Compose 的。 后来在 Android Studio 的官方更新说明里找到了: https://developer.android.com/studio/releases?hl=zh-cn#updates-to-npw-nmw Android Studio Flamingo Canary 6 添加了用于创建项目或模块的新模板。默认情 ...

阅读全文...

android 系统上关联文件类型与编辑器,用 kotlin 自动实现

起因是,我想保存一个 golang 代码源文件到 Android 手机上,方便在等车的时候继续阅读代码。但是我发现 Android 系统上居然没有一个类似纯文本编辑器的 app,小米系统内置的阅读器排版混乱,且无法编辑,默认诱导去下载 WPS。所以我想实现一个简单的纯文本编辑器,方便打开各类源码文件。 以下是 ChatGPT 给出的提示,暂未测试,存档一下。 文件类型与编辑器关联 在 Kotlin 中,可以使用以下代码来关联文件类型和编辑器: val mimeType = "application/pdf" //要关联的文件类型 val packageName = &quo ...

阅读全文...

Android Studio 最新版 Logcat 中过滤日志

在调试 android 音频 app 过程中,发现日志疯狂刷新,完全看不到有用的日志信息。而最新的 logcat 没有过滤日志级别的界面选项,查了一下原来需要手动敲规则,这也太激进了。。。 按照日志级别过滤 例如分别按照 error / warn 来过滤日志: package:mine level:error package:mine level:warn mine 代表当前调试的 app。 实际上可以按照 package, tag, level 这三个来过滤。 Logcat 中 A 代表什么 W:warn, E:error。 Valid levels are: VERBOSE, DE ...

阅读全文...

Android Service 与 Activity / Fragment 的几种通信方式

由于要实现切换到 Android 系统桌面时,蓝牙对讲功能依然可以使用,所以把主要的语音通信逻辑都放到了前台服务中,即 Foreground Service 中。但是,需要在打开对应的 Activity / Fragment 时,可以同步 Service 中的状态,及语音波形显示。这时就需要一种方式,能及时将 Service 中的变量状态发生变化时,及时通知 Activity / Fragment。 查了几种方案,最终选择了 LiveData。 LocalBroadcastManager 即,单个应用内部的广播。 LocalBroadcastManager.sendBroadcast 方法会将 ...

阅读全文...

华为鸿蒙系统与 Android 的版本对应关系

在开发一个运行在华为平板上的蓝牙对讲 APP,最初没有测试平板设备之前,我是基于小米 Android 12 的手机测试的。 华为平板到手之后,被其系统版本号搞蒙了。。。 系统设置里,显示的是 HarmonyOS 版本,版本号是 2.0.0。 网上查了一下,这个版本号实用了多年。。。 点击升级,可以看到还有更小的版本号: 升级前的版本:2.0.0.260 升级后的版本:2.0.0.275 为了确定兼容性,我想了解一下鸿蒙系统与 Android 版本的对应关系。 鸿蒙与 Android 的关系 网上说,Harmony OS 2.0 基于 Andriod 开源项目 (AOSP, Android ...

阅读全文...

Android Studio 中使用 VIM 编辑模式 - IdeaVim 插件

在 Android Studio 里写代码非常的不适应,还是想能用上 VIM 的快捷键。 发现有一个非常成熟的 VIM 插件 IdeaVim: https://github.com/JetBrains/ideavim 不但 Android Studio 中可以使用,在 Idea 系列 IDE 中都可以使用。 安装 File - Settings - Plugins 搜索 IdeaVim 配置 安装插件后,重启 Android Studio 会看到右下角多了个 VIM 的图标。 点开可以: 启用/禁用 IdeaVim 插件 编辑配置文件 ideavimrc 配置默认快捷键 go to de ...

阅读全文...

Android SharedPreferences 存储 key / value 数据

Android App 中想实现保存默认的蓝牙设备 Mac 地址,本质上就是一个 key / value 键值对的存储及读取过程。 可以使用 SharedPreferences 来实现。 SharedPreferences 指向了一个存储键值对的 XML 文件,并提供了读写接口。 共享级别 activity 级:getPreferences(), 即单个 activity 内共享的存储 app 级:即全局共享。getSharedPreferences(), 但是这个要加上两个参数,第一个是文件名,第二个是模式,用 MODE_PRIVATE 即可(本app内可见) app 级:还有一个是 ge ...

阅读全文...

Android Service & Foreground Service

在调试一段 Android 蓝牙连接的代码时,不太明白为何建立蓝牙连接在 Foreground Service 中执行。 Service 与 Activity 的区别 Service 没有 UI 界面,类似一个后台服务 Activity 需要关联一个 UI 界面 Activity is a GUI and service is non-gui thread which can run in the background. service 可以在后台运行,适合执行耗时操作。 A Service is an application component that can perform l ...

阅读全文...