自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 基于Jetpack Compose的密码实现(升级版)

采用Navigation+ViewModel架构,实现页面与状态的解耦完善了密码管理全流程(设置/验证/修改/取消/重置)增强了系统集成能力(沉浸模式、刘海屏适配、策略同步)优化了用户体验(操作引导、状态反馈、错误处理)核心设计思路是通过声明式UI与响应式状态管理,实现可维护、可扩展的密码管理系统,同时保证跨设备兼容性与用户操作流畅性。

2025-11-20 16:16:23 896

原创 常见 MDM API和国内部分厂商功能定制差异

模式类型核心依赖权限获取方式稳定性开发成本适用场景EMM 平台模式厂商云端平台远程注册与策略下发★★★★★★★★★☆企业级、政企项目证书签名模式厂商授权证书应用签名激活★★★★☆★★★☆☆中型企业、自建平台定制 ROM 模式ROM 底层集成系统预置权限★★☆☆☆★★★★★定制终端、封闭设备。

2025-10-31 16:57:43 800

原创 Android电池优化和前后台任务

自 Android 6.0(API 23)起,系统引入两项电池优化机制:低电耗模式(Doze Mode)与应用待机模式(App Standby)。它们通过限制后台活动来延长续航,但也带来了应用行为改变,特别是依赖后台运行、网络长连接或定时任务的业务场景,如 MDM 系统应用。

2025-10-29 15:36:33 1162

原创 Android系统的网络检测与Captive Portal(强制门户)

校验 SSID/BSSID拦截非授权 Wi-Fi 连接阻断不允许的网络流量若应用在连接阶段阻断系统的探测请求Wi-Fi 已连接↓白名单逻辑拦截网络流量(含检测流量)↓检测 URL 无响应 → 系统判定不可用↓Wi-Fi 自动断开 / 回落移动数据白名单 Wi-Fi 明明可用却被自动切断Captive Portal 检测失败导致认证页面不弹出业务层明明可联网却因系统误判失败场景推荐解决方式检测请求被阻断放行系统检测域名或 IP验证耗时过长导致超时业务验证异步执行。

2025-10-28 15:56:16 986

原创 Android常见的系统管理器及功能实现

在 Android 应用开发中,系统管理器(System Service)是访问系统能力的核心入口。它们由系统进程提供,通过获取,可用于控制网络、设备策略、系统设置访问等。本文将总结常见系统管理器以及它们的典型使用方法。

2025-10-28 11:03:26 758

原创 Android 权限模型(前台、后台、特殊权限)

应用 Activity 处于可见状态(用户正在操作界面);应用运行前台服务(需通过显示通知,如音乐播放、导航);应用执行短时间前台任务(如后台服务临时启动前台界面过渡)。是危险权限的“默认授权范围”:用户授予危险权限后,默认仅允许前台使用;无需额外申请:通过动态权限弹窗获取授权后,前台场景可直接使用。应用 Activity 完全不可见(用户切至其他应用、按 Home 键退至桌面);应用仅运行后台服务(未启动前台服务,无通知提示);应用处于后台同步/下载等非交互状态。

2025-10-11 14:47:58 938

原创 Activity/Service/Broadcast/ContentProvider 生命周期交互

目标实现方案避免内存泄漏及时解绑 Service/Receiver优化性能动态注册广播,按需启用状态安全使用 Handler/LiveData 更新 UI后台可靠前台 Service + 线程管理Android 组件的生命周期关系是由调用链动态构建的"依附链"。掌握这种机制才能开发出稳定、高效、安全的应用。

2025-10-10 10:28:09 577

原创 Kotlin 内联函数、高阶函数、扩展函数

使用高阶函数会带来运行时性能损耗:每个函数都是一个对象,并会形成闭包。闭包包含了函数体内访问的变量作用域。函数对象和类的内存分配以及虚拟调用都会产生额外的运行时开销。Kotlin 高阶函数是指可以接收函数作为参数或返回函数的函数。关键字声明,其作用就是。

2025-10-09 15:18:26 342

原创 理解学习LiveData

LiveData 是 Android 官方推荐的 UI 数据驱动工具,凭借生命周期感知、自动订阅管理和数据持久化特性,极大简化了 MVVM 架构中的状态管理。在 XML 项目中,它依然是最优解;在 Compose 项目中,可以配合 StateFlow 共同使用。

2025-09-30 11:15:50 879

原创 Android 应用配置跳转微信小程序

实现微信小程序跳转需要获取小程序提供的Scheme URL。官方文档说要通过html动态跳转,经过测试发现,WebView无法识别该Scheme,最终通过Intent方式成功实现跳转。注意:此实现需要使用小程序的明文Scheme URL,需要确保小程序已开启相关权限。

2025-09-26 09:49:08 457

原创 理解 StateFlow

StateFlow 是 Kotlin 协程库中高效的状态管理工具,基于 Flow 构建,专为处理应用状态变化而设计。

2025-09-18 09:26:27 516

原创 Kotlin flow详解

专注于数据生产和消费处理逻辑托管给 Flow避免复杂的回调处理提供多种优化手段应对不同场景需求。

2025-09-17 15:59:14 600

原创 协程(Coroutine)的使用场景与常见坑

协程作为现代异步编程核心工具,凭借用户态调度与挂起恢复机制高效利用线程资源,可承载大量轻量任务支持同步风格编写异步逻辑,提高开发效率显著提升 I/O 密集型任务吞吐量。

2025-09-17 11:38:59 720

原创 Android开发学习计划(2025 下半年)

这是我通过ai问答摸底后给出的一份学习计划,意在给下半年给出一个清晰的学习目标,部分实施会因为工作需要变动,以实际需求为主。

2025-09-17 10:49:20 639

原创 Android wifi简单白名单实现逻辑

实现WiFi白名单功能主要通过限制SSID(WiFi名称)和MAC地址(设备物理地址)来控制网络接入权限。注:完全可靠的白名单实现可能需要结合设备管理API或MDM解决方案,特别是企业级应用。

2025-07-17 11:07:10 464

原创 认识鸿蒙之了解应用结构

在DevEco Studio中,用户可以根据个人习惯选择项目结构显示方式,就像Android Studio一样。习惯了Android Studio的Project视图的我,在DevEco Studio中也选择了同样的显示模式。鸿蒙应用采用四层架构设计:内核层、系统服务层、框架层和应用层。其中系统服务层、框架层和应用层与我当前工作密切相关,是重点关注领域。AppScope(鸿蒙)对应Android的app/src/main/res,均用于存储全局资源(如主题、字符串等)。

2025-06-23 15:39:57 1148

原创 Android学习之Provider

创建 Content Provider 类继承AUTHORITY) : Cursor?) : Uri?): Uri?context?) : Cursor?) : Uri?) : Uri?) : Int {

2025-06-13 16:42:38 871

原创 Android学习之Window窗口

Window(窗口)是用户熟悉的图形界面元素,类似于Windows操作系统中的视窗概念。层级结构:采用Z-order排序管理,层级通过属性指定。显示区域:定义内容显示的位置和范围。输入事件处理:负责接收和处理触摸、按键等用户输入事件。

2025-06-11 15:08:07 1193

原创 Android学习之定时任务

UI 相关定时:优先用Handler,但需注意Runnable的静态内部类封装和生命周期清理。后台长周期任务:首选,自动处理版本兼容和电量优化,避免直接使用或。响应式编程场景:使用RxJava或协程,前者适合复杂异步流,后者语法更简洁且轻量。避免高频唤醒:尽量将多个定时任务合并为的批量调度,减少设备唤醒次数。内存管理核心原则:任何持有上下文或 UI 组件引用的定时任务,必须在生命周期结束时(如)停止或取消。

2025-05-28 17:59:14 1504

原创 Android开发之理解设备管理器

创建。

2025-05-26 11:54:26 616

原创 Android开发之理解EMM

EMM(Enterprise Mobility Management)是一套完整的解决方案,用于企业集中管理和控制移动设备(尤其是Android设备)在企业环境中的使用。

2025-05-26 10:38:56 708

原创 Android学习之响应式编程

可以看出,Android 的响应式编程范式主要是由观察者模式结合响应式流来实现的。观察者模式作为核心架构,构建起数据生产者与消费者之间的订阅关系,使得数据变化能够及时被关注;响应式流则负责承载数据的流动与处理,通过操作符对数据进行转换、过滤等操作,实现复杂业务逻辑的编排。

2025-05-12 10:06:08 678

原创 Jetpack DataBinding/ViewBinding学习

/ 将字符串绑定到 ImageView 的 src 属性@JvmStatic) {url?

2025-05-09 17:09:28 907

原创 Android设备序列号获取方式全解析

设备序列号获取需要根据具体业务场景选择最合适的方案。建议采用"标准API+厂商兜底+备用标识"的多层策略,同时注意遵循最新的隐私政策要求。随着Android系统的持续演进,开发者需要持续关注API变更和设备管理规范的变化。

2025-05-09 14:17:55 2175

原创 Android开发问题记录

广播时,动态注册在鸿蒙4.0系统正常,但在鸿蒙3.0系统无法接收广播。广播存在兼容性问题,或系统权限策略差异导致动态注册失效。(用于记录开发中鸿蒙环境差异及问题,持续更新)(待补充,欢迎留言补充原因)中添加静态注册后问题解决。推测鸿蒙3.0对动态注册的。

2025-04-09 18:08:38 492

原创 Android 学习之 Navigation导航

Navigation 组件是 Android Jetpack 的一部分,用于简化应用内导航逻辑,支持 Fragment、Activity 和 Compose 之间的跳转。单 Activity 架构:减少 Activity 冗余,通过 Fragment 或 Compose 实现界面切换。可视化导航图:通过 XML 或代码声明页面跳转关系。统一返回栈管理:自动处理返回按钮和手势导航。类型安全的参数传递:通过 Safe Args 插件或 Compose 的 Route 实现。传统 XML 方式。

2025-04-07 17:26:42 1410

原创 Android学习之Material Components

以下是 Material Design 提供的核心控件列表(基于最新 库),按功能分类整理:依赖版本:核心特性:注意事项:特点对比控件特点普通 Switch原生基础控件,样式简单(直角滑块/无主题适配),无 Material 特性(如动态颜色/涟漪效果)。SwitchMaterial支持 Material Design 规范(圆角滑块/动态主题),提供图标支持、触摸涟漪反馈、无障碍优化。使用场景对比控件适用场景普通 Switch

2025-04-03 10:27:26 1335

原创 Android设备锁屏功能开发实践

开发教训早期未采用标准化架构导致:状态管理分散在多个Activity页面跳转逻辑耦合严重密码验证流程难以扩展手势实现要点合理设计触摸检测区域路径坐标需进行归一化处理性能优化优先考虑绘制算法兼容性考量自适应不同屏幕密度处理全面屏异形切割支持深色模式切换。

2025-03-28 11:49:36 1149

原创 手把手实现优雅的Android自定义开关组件

该组件已在实际项目中验证,能够显著提升设置类页面的交互体验。通过参数化设计,开发者可以快速适配不同产品风格,且性能表现优异(60fps流畅动画)。欢迎根据实际需求进行二次扩展!

2025-03-28 11:35:42 613

原创 Jetpack Compose应用列表展示及优化

该文章是我将代码提交给deepseek模糊化处理后的代码,如要直接使用请根据实际场景调整,在此仅做记录和参考。

2025-03-28 11:27:41 364

原创 使用Compose实现自定义手势密码

最后效果能正常绘制导航线和连接线,但原点激活状态会一直保持,应该像绘制连接线一样记录每个圆的激活状态和顺序,存储到一个矩阵中,用于密码验证。接下来我会绘制导航线和连接线,导航线用于确定上一个圆触发位置到当前手势位置,连接线用于上一个经过触发的位置到下一个经过触发位置的显示。先绘制外圆再绘制内圆,时内圆显示在外圆上,达成想要的效果。绘制圆我们要使用Canvas配合drawCircle绘制,在这里我会绘制一个内圆一个外圆,内圆做显示,外圆做触发显示。最后达成的效果是手势经过外圆范围后外圆处于显示状态。

2025-02-21 14:35:28 413

原创 Jetpack Compose初体验

基于 Kotlin 语言,Compose 利用 Kotlin 的特性来简化 UI 开发过程,核心思想是使用函数来描述 UI 的外观和行为。从 AI 的搜索结果来看,Compose 开发具有以下特点:声明式编程、基于 Kotlin、高效的状态管理、简洁的布局系统、实时预览、与现有代码兼容。由于工作需要,我们当前要在老代码的基础上使用 Compose 进行新页面的开发,这项工作主要落在我的身上。对于非平板逻辑页面,点击后触发页面跳转,通过。根据产品的原型图,我基于平板和手机做出了不同的响应式布局。

2025-02-14 16:35:06 829

原创 Android广播和阿里云消息推送服务

广播(Broadcast)在Android开发中是一个重要的概念,它类似于现实生活中的广播电台,通过“大喇叭”将消息传递给所有感兴趣的接收者。广播机制在Android系统中用于在不同组件之间传递信息,是一种非常灵活且强大的通信方式。广播接收者(BroadcastReceiver)是Android系统中用于接收和处理广播消息的组件。它是一个继承自的类,通过重写方法来处理接收到的广播消息。注册广播接收者静态注册:在AndroidManifest.xml文件中声明,适用于需要在应用启动前就能接收到广播的情况。

2025-01-09 16:16:10 1784

原创 Android中的Service

Service是Android系统四大组件之一,定义是服务,一种长时间在后台长时间运行的操作或处理异步任务的组件。Service可以不依赖于用户界面的情况下运行,并且可以在应用被关闭后继续运行。属性含义默认值示例服务的类名必填.MyService服务是否可以被启动true服务是否可以被外部应用启动falsetrue启动或绑定服务所需的权限服务运行的进程名称服务是否运行在隔离进程中falsetrue服务的显示名称服务的图标服务是否随任务清除而停止truefalse。

2025-01-09 15:47:26 1426

原创 Android开发之Hander消息机制

在 Android 系统中,消息机制是一个高效的任务调度系统,负责在不同组件之间传递消息、执行任务。(消息处理器)协同工作,确保消息的传递和处理能够高效、有序地进行。)都会被放入这个收发室,按照先来后到的顺序排列,等待被取出处理。是消息机制中最基本的单位,就像一封写有任务指令的信件。采用先进先出(FIFO)的方式管理信件,确保任务的有序执行。中取出的信件,并根据信件的内容执行相应的任务。就像一个邮递员,负责不停地检查信件收发室(就像一个信件收发室,所有待处理的信件(),并将信件送到对应的收件人(

2025-01-09 10:38:48 1096 1

原创 Android基于回调的事件处理

在 Android 开发中,回调机制(基于回调的事件处理)是一种更加灵活和通用的解决方案,适用于异步操作、跨模块通信、自定义组件等多种场景。相较于传统的基于监听器的事件处理机制,回调机制的优势在于更高的灵活性和更广泛的应用范围。通过合理使用回调机制,可以显著提高代码的可维护性和扩展性。使用 OkHttp 进行网络请求时,可以充分利用其提供的Callback接口来处理异步操作的结果。

2025-01-08 15:16:48 1068

原创 Android基于监听的事件处理机制

在 Android 开发中,事件监听器的实现方式多种多样,开发者可以根据具体需求选择最合适的方式。方式特点匿名内部类简单高效,适合单次使用内部类代码复用性高,适合中等复杂度的逻辑外部类适合复杂逻辑,代码模块化Activity 作为监听器与 Activity 生命周期紧密结合,适合处理多个事件XML 绑定简单直观,适合处理单个组件的简单逻辑通过灵活运用这些事件监听方式,开发者可以实现高效、可维护的 Android 应用程序。

2025-01-08 14:43:22 1141

原创 Android中,什么是Context?

在接触Android开发后,我常常使用一个元素——Context。我很清楚它代表什么:一个上下文对象。我可以通过这个Context对象获取设备序列号、启动Activity、发送广播、获取系统服务等。但我也有一些疑惑:Context到底是什么?我获取和使用的Context来自哪里?它代表的“上下文”指代的是什么?为什么它能访问那么多的资源?相信很多人应该都有和我一样的疑问。) {val context = this // 使用 this 关键字获取当前 Activity 的 context。

2025-01-07 18:01:47 996

原创 Android中Activity

生命周期是指一个对象从创建到销毁的整个过程。在 Android 中,Activity 的生命周期指的是 Activity 从创建到销毁的一系列状态变化。这些状态变化通过一系列生命周期回调方法来管理。调用时机:当 Activity 第一次被创建时调用。用途:初始化 Activity,设置布局,绑定数据等。注意事项:在这个方法中,你应该完成所有必要的初始化任务,例如设置布局,初始化视图和数据。onStart()调用时机:在 Activity 变得可见但尚未与用户交互时调用。用途:恢复在。

2025-01-07 15:17:04 1334

原创 关于Android设备序列号获取的方法

在某些情况下,通过代码获取设备序列号可能受到限制,特别是在Android 10及以上版本中,由于权限和隐私保护的加强,获取设备序列号变得更加严格。作为设备的唯一标识,提供了设备的唯一信息。从Android 10(API级别29)开始,访问设备序列号需要相应的权限,并且可能需要设备所有者的授权。通过这种方法,即使无法通过代码直接获取设备SN,也可以通过用户参与的方式确保应用能够获取并使用设备的唯一标识符。是一个设备的伪唯一标识符,虽然它并非真正的序列号,但在某些场景下可以替代序列号使用。

2025-01-06 17:52:20 20876

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除