avatar
文章
97
标签
33
分类
13
首页
归档
标签
分类
友链
关于
Fleming's Blog
搜索
首页
归档
标签
分类
友链
关于

Fleming's Blog

更新当前的选中状态
发表于2023-11-21|Code
更新当前的选中状态123456789101112131415161718192021222324252627282930313233private fun updateSelectStatus(curUser: User) { mAdapter.run { var targetPosition = -1 var previousCheckedPosition = -1 // 遍历一次,同时更新状态并记录位置 data.forEachIndexed { index, user -> val wasChecked = user.isChecked val shouldBeChecked = (user.uid == curUser.uid) if (wasChecked != shouldBeChecked) { user.isChecked = shouldBeChecked ...
将 raw 资源复制为临时文件
发表于2023-11-14|Code
将 raw 资源复制为临时文件123456789101112131415161718192021import java.io.*fun copyRawToCache(context: Context, @RawRes rawId: Int, fileName: String): File? { val cacheFile = File(context.cacheDir, fileName) if (cacheFile.exists()) { // 可选:避免重复复制(注意更新策略) return cacheFile } return try { context.resources.openRawResource(rawId).use { input -> cacheFile.outputStream().use { output -> input.copyTo(output) ...
系统服务的实现方式
发表于2023-09-29|系统
系统服务的实现方式 方式 实现语言 启动方式 调用方 适用场景 1. Java 系统服务 Java SystemServer 启动 Java 系统 App、SystemUI、Settings 逻辑简单,需与 AMS/PMS 交互 2. Native AIDL 服务 C++ init 启动(.rc) C++(如 frameworks/av)、Java(通过 Binder) 高性能、C++ 实现、跨语言调用 ✅ 3. 传统 Native Binder 服务 C++ init 启动 C++ 老项目、不依赖 AIDL 4. HIDL / AIDL (vendor) C++/Java hwservicemanager vendor HAL、system/vendor 主要用于 HAL 层,不推荐用于 system 内部服务 5. Socket / HAL / 共享内存 C/C++ 自定义 仅限本地进程 低延迟、无 Binder 开销,但不是标准系统服务 ✅ 二、针对你的场景:哪种最合适?你的...
构建jni_libs
发表于2023-09-16|系统
构建jni_libs 系统 App 本来就不该用 SDK 模式 —— SDK 模式是给第三方 App 或 SDK 库用的。 模式 特点 可见模块 平台模式(无 sdk_version) 用于构建系统镜像、系统 App 可见所有模块,包括 “libc++_shared” SDK 模式(有 sdk_version) 用于构建面向第三方 App 的库 只能依赖 NDK/SDK 公共模块,如 “ndk_libc++_shared”
开发方向之Framework层
发表于2023-06-04|系统
开发方向之Framework层Framework层开发是Android系统开发中的一个关键领域,它涉及到对Android框架的理解和定制化修改。这个层次的开发通常需要开发者具备深厚的Java知识以及对整个Android系统架构有全面的理解。以下是关于Framework层开发的一些具体介绍: Android Framework概述Android Framework是位于Linux内核之上的一个抽象层,它为应用程序提供了各种服务和API。这些服务和API使得开发者能够构建丰富的用户界面、处理数据、管理资源等。Framework的核心组件包括Activity Manager Service (AMS)、Window Manager Service (WMS)、Content Providers、View System等。 主要关注点 核心服务:理解并能修改AMS、WMS等核心服务的工作机制对于Framework层开发至关重要。例如,AMS负责管理应用进程的状态,而WMS则负责管理屏幕上的窗口。 IPC(Inter-Process Communication)机制:Android使用B...
分区存储获取文件
发表于2023-03-24|系统
分区存储获取文件从 Android Jetpack 的 Activity Result API 开始,推荐使用 ActivityResultLauncher 来处理活动结果(如启动文件选择器或拍照等操作)。相比于传统的 startActivityForResult() 方法,ActivityResultLauncher 提供了更简洁、现代化的 API。 以下是使用 ActivityResultLauncher 和 Storage Access Framework (SAF) 获取文件的完整示例代码: 1. 使用 ActivityResultLauncher 启动 SAF 文件选择器123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android...
适配34广播动态注册
发表于2023-02-08|Code
适配34广播动态注册在target 适配到34之后, 要注意registerReceiver方法的第三个参数必须设置RECEIVER_EXPORTED或RECEIVER_NOT_EXPORTED,否则报错。12345678910111213141516/** * 适配14,动态注册需要加flag * @param context * @param receiver * @param filter */fun registerReceiverCompat( context: Context, receiver: BroadcastReceiver, filter: IntentFilter) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { context.registerReceiver(receiver, filter, RECEIVER_NOT_EXPORTED) } else { ...
蓝牙项目启动权限和蓝牙定位开关的问题
发表于2023-02-08|经验
蓝牙项目启动权限和蓝牙定位开关的问题蓝牙项目启动,想要顺利地使用蓝牙扫描和连接,分两种情况 Android 6以上到Android 12以下需要动态申请定位权限ACCESS_COARSE_LOCATION和ACCESS_FINE_LOCATION,两个都要申请 Android 12以上需要动态申请BLUETOOTH_SCAN和BLUETOOTH_CONNECT 完成上述权限申请后,还需要在6-12判断蓝牙和定位是否打开,12以上不需要打开定位也可以 申请动态权限,拒绝就提示进设置,同意就走下一步 判断蓝牙和定位开关是否打开
Android的支持库整理
发表于2023-02-08|经验
Android的支持库整理Android 支持库(Support Libraries)是一个集合,包含了多个不同的库,每个库都支持特定的 Android 版本和功能。随着时间的发展和技术的进步,这些库也在不断演变。以下是 Android 支持库的主要分类及其用途: Compatibility Libraries (兼容性库) v4 (support-v4):提供了核心兼容性功能,如 Fragment、ViewPager 等,使得开发者可以在低版本 Android 上使用较新的 API 功能。 v7 (appcompat-v7, recyclerview-v7, cardview-v7, 等):提供了更高级的 UI 组件和行为,如 Material Design 组件(Toolbar、CardView)、RecyclerView 等。 Material Components Library (材料组件库) material (material-components):包含了 Material Design 组件,如 BottomNavigationView、Floatin...
新版logcat的过滤关键字
发表于2023-02-08|经验
新版logcat的过滤关键字 package:匹配记录日志的软件包名,其中特殊值mine匹配当前打开项目对应的应用log。 level:与指定或者更高级别的日志匹配,比如debug或者error,输入level后as会自动提示可以选择。 tag: 匹配日志的tag字段 message:匹配日志中我们自己填写的message的部分。 age:让窗口中只保留最近一段时间的log,值为数字加单位,s表示秒,m表示分钟,h表示小时,d表示天 is: 这个键有两个固定的value取值,crash匹配应用崩溃日志,stacktrace匹配任意类似java堆栈轨迹的日志 process:匹配记录日志的进程名 正则相关tag:GUI 表示tag中包含“GUI”字符的-tag:GUI 表示tag中不包含“GUI”字符的 tag=:GUI 表示tag中等于“GUI”字符的(完全匹配)-tag=:GUI 表示tag中不等于“GUI”字符的 tag~:^(http)(com/)$ 表示tag中满足正则规则的(以http开头以com&...
1234…10
avatar
Fleming Chen
不积跬步无以至千里,不积小流无以成江海。——《荀子·劝学》
文章
97
标签
33
分类
13
Follow Me
公告
欢迎来到我的博客,有任何疑问可以随时联系我交流讨论!
最新文章
音频流处理过程
音频流处理过程2026-01-16
AOIP和VOIP
AOIP和VOIP2026-01-06
AudioFlinger的基本概念
AudioFlinger的基本概念2025-08-28
音频领域基本概念
音频领域基本概念2025-08-20
Unicast、Multicast、Broadcast的含义及关系
Unicast、Multicast、Broadcast的含义及关系2025-08-19
分类
  • ADB9
  • Code18
  • Flutter1
  • Git10
  • Grep1
  • Linux3
  • Repo2
  • Unity 3D1
标签
Markdown 架构 unity adb 学习路线 Android Studio 日常 系统广播 git UI 缓存 AlertDialog Dialog Handler LruCache BroadcastReceiver 音频 MVP SQLite flutter 数据库 经验 AsyncTask Message EditText 系统 IDE 扩展 开发工具 代码 linux Android 自学
归档
  • 一月 2026 2
  • 八月 2025 3
  • 七月 2025 5
  • 六月 2025 1
  • 四月 2025 2
  • 十一月 2024 1
  • 七月 2024 2
  • 二月 2024 3
网站信息
文章数目 :
97
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2016 - 2026 By Fleming Chen框架 Hexo 6.1.0|主题 Butterfly 5.5.4
搜索
数据加载中