# 安卓控件库 **Repository Path**: zqm114/JoydLib ## Basic Information - **Project Name**: 安卓控件库 - **Description**: 用于安卓的控件库。 包含WebSocket - **Primary Language**: Android - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-08-28 - **Last Updated**: 2025-11-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JoydLib JoydLib是一个基于Jetpack Compose的Android控件库,提供了一系列美观、易用的自定义控件,帮助开发者快速构建高质量的Android应用界面。此外,还包含了WebSocketClient网络模块和joydlib.dev系统服务模块。 ## 特性 - 基于最新的Jetpack Compose构建 - 提供统一的主题系统 - 支持深色模式和动态颜色(Android 12+) - 完全可组合的控件设计 - 易于扩展和自定义 - 功能完善的WebSocket客户端实现 - 系统服务相关功能(权限管理、前台服务等) ## 目录结构 ``` JoydLib/ ├── app/ # 示例应用 ├── joydlib.dev/ # 系统服务模块(权限管理、前台服务等) ├── websocketclient/ # WebSocket客户端模块 └── example/ # 示例代码模块 ``` ## 快速开始 ### 集成到项目中 1. 在你的项目根目录的`settings.gradle.kts`文件中添加仓库地址: ```kotlin dependencyResolutionManagement { repositories { mavenCentral() maven { url = uri("http://geek.cdjkt.com:30003/repository/maven-public") isAllowInsecureProtocol = true } // 其他仓库... } } ``` 2. 在你的应用模块的`build.gradle.kts`文件中添加需要的依赖: **完整库依赖:** ```kotlin dependencies { implementation("com.joyd:joydlib:1.0.0") // 确保你的项目也包含了Compose依赖 implementation(platform("androidx.compose:compose-bom:2024.03.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.material3:material3") // 其他Compose依赖... } ``` **WebSocketClient模块依赖:** ```kotlin dependencies { implementation("com.joyd.joydlib.io:websocketclient:1.0.4") // WebSocketClient依赖OkHttp,确保你的项目也包含了OkHttp依赖 implementation("com.squareup.okhttp3:okhttp:4.12.0") } ``` **joydlib.dev系统服务模块依赖:** ```kotlin dependencies { implementation("com.joyd:joydlibdev:1.0.0") } ``` ### 使用控件 1. 在你的Compose UI中使用JoydLib的主题包裹你的界面: ```kotlin import com.joyd.joydlib.ui.theme.JoydLibTheme @Composable fun MyApp() { JoydLibTheme { // 你的界面内容 } } ``` 2. 使用JoydLib提供的控件: ```kotlin import com.joyd.joydlib.composables.JoydButton @Composable fun MyScreen() { Column { JoydButton( text = "点击按钮", onClick = { // 处理点击事件 } ) } } ``` ## 模块介绍 ### UI控件模块 提供了一系列基于Jetpack Compose的自定义控件,帮助开发者快速构建高质量的Android应用界面。 #### JoydButton 一个自定义的按钮控件,提供了常用的按钮功能和样式定制选项。 **参数:** - `text`: 按钮显示的文本 - `onClick`: 点击事件回调 - `modifier`: 修饰符 - `enabled`: 是否启用按钮(默认为true) - `backgroundColor`: 按钮背景颜色(默认使用主题主色) - `contentColor`: 按钮文本颜色(默认使用主题主文本色) **示例:** ```kotlin JoydButton( text = "提交", onClick = { submitForm() }, modifier = Modifier.padding(16.dp) ) JoydButton( text = "禁用按钮", onClick = { /* 不会触发 */ }, enabled = false ) ``` ### joydlib.dev 系统服务模块 joydlib.dev 是一个专注于Android系统服务相关功能的模块,提供了一系列便捷工具类,帮助开发者更轻松地处理Android系统服务相关的操作。 #### 主要功能包 1. **service包**:包含系统服务相关的核心功能 - `PermissionManager` - 权限管理工具类 - `ForegroundService` - 前台服务基类 - `MediaProjectionService` - 媒体投影服务(屏幕截图) - `BroadcastManager` - 广播管理工具 2. **dev包**:包含开发调试相关的功能 - `ScreenTapHelper` - 屏幕点击工具类 - `AccessibilityServiceHelper` - 无障碍服务辅助类 - `AccessibilityServiceUtils` - 无障碍服务工具类 - `ScreenTapActivity` - 屏幕点击相关Activity #### PermissionManager:权限管理工具 提供对Android各种权限的统一管理,包括通知权限、媒体投影权限等。 ```kotlin import com.joyd.joydlib.service.PermissionManager import androidx.activity.ComponentActivity // 检查并请求通知权限 val hasNotificationPermission = PermissionManager.checkNotificationPermission(this) // 处理权限请求结果 PermissionManager.onRequestPermissionsResult( requestCode, permissions, grantResults, onPermissionGranted = { // 权限授予后的处理 }, onPermissionDenied = { // 权限拒绝后的处理 } ) // 创建媒体投影权限请求启动器 val mediaProjectionLauncher = PermissionManager.createMediaProjectionLauncher( activity = this, onPermissionGranted = { resultCode, data -> // 使用MediaProjectionService处理权限结果 MediaProjectionService.setMediaProjection(this, resultCode, data) }, onPermissionDenied = { // 处理权限拒绝情况 } ) ``` #### MediaProjectionService:媒体投影服务 提供屏幕截图功能,基于Android的MediaProjection API实现。 ```kotlin import com.joyd.joydlib.service.MediaProjectionService // 启动媒体投影服务 MediaProjectionService.startService(context) // 检查是否有活跃的媒体投影实例 if (MediaProjectionService.hasActiveMediaProjection()) { // 执行截图操作 // ... } // 停止服务 MediaProjectionService.stopService(context) ``` #### ScreenTapHelper:屏幕点击工具 提供多种方式实现屏幕点击功能,适应不同的应用场景和权限需求。 ```kotlin import com.joyd.joydlib.dev.ScreenTapHelper // 使用自动选择的方式点击屏幕指定坐标 ScreenTapHelper.tap(500, 1000) // 在(500, 1000)坐标点击 // 指定点击方式 ScreenTapHelper.tap(500, 1000, ScreenTapHelper.TapMethod.ACCESSIBILITY_GESTURE) // 执行长按操作 ScreenTapHelper.longPress(500, 1000, 2000) // 在(500, 1000)坐标长按2秒 ``` #### ForegroundService:前台服务基类 提供前台服务的通用实现,简化前台服务的创建和管理。 ```kotlin import com.joyd.joydlib.service.ForegroundService import android.app.Notification import androidx.core.app.NotificationCompat // 自定义前台服务类 class MyForegroundService : ForegroundService() { override fun getServiceClass(): Class { return MyForegroundService::class.java } override fun createForegroundNotification(): Notification { // 创建并返回前台服务通知 return NotificationCompat.Builder(this, getNotificationChannelId()) .setContentTitle("我的前台服务") .setContentText("服务正在运行...") .setSmallIcon(R.drawable.ic_notification) .build() } override fun onServiceStart() { super.onServiceStart() // 服务启动时的自定义逻辑 } } // 启动自定义前台服务 MyForegroundService().startForegroundService(context) ## 主题定制 JoydLib提供了灵活的主题定制功能,你可以通过覆盖默认颜色来创建自己的品牌风格。 ## 开发说明 如果你想为JoydLib贡献代码或进行自定义修改: 1. 克隆仓库并在Android Studio中打开项目 2. 确保你使用的是兼容的Android Studio版本(推荐最新的稳定版) 3. 根据功能需求在相应模块中添加新功能 4. 为新功能编写文档和示例代码 5. 确保代码风格与现有代码一致 ## 许可证 本项目使用MIT许可证。 ## WebSocketClient库 WebSocketClient是JoydLib中的一个独立模块,提供了功能完善的WebSocket客户端实现,支持断线重连、状态管理、消息发送等功能。 ### 特性 - 自动断线重连机制 - 连接状态管理 - 文本和二进制消息支持 - 连接暂停和恢复功能 - 基于OkHttp的稳定实现 - Kotlin协程支持 ### 集成到项目中 WebSocketClient可以作为独立库集成到项目中,无需依赖整个JoydLib。 1. 在你的项目根目录的`settings.gradle.kts`文件中添加Maven仓库地址: ```kotlin dependencyResolutionManagement { repositories { mavenCentral() maven { url = uri("http://geek.cdjkt.com:30003/repository/maven-public") isAllowInsecureProtocol = true } // 其他仓库... } } ``` 2. 在你的应用模块的`build.gradle.kts`文件中添加依赖: ```kotlin dependencies { implementation("com.joyd.joydlib.io:websocketclient:1.0.4") // WebSocketClient依赖OkHttp,确保你的项目也包含了OkHttp依赖 implementation("com.squareup.okhttp3:okhttp:4.12.0") } ``` ### 基本使用 1. 创建WebSocketClient实例: ```kotlin import com.joyd.joydlib.io.WebSocketClient // 初始化WebSocketClient val webSocketClient = WebSocketClient("ws://your-websocket-server.com:port") ``` 2. 设置回调函数: ```kotlin // 设置消息接收回调 webSocketClient.setOnMessageCallback { // 处理接收到的文本消息 Log.d("WebSocket", "Received message: $it") } // 设置连接状态变化回调 webSocketClient.setOnStateChangeCallback { // 处理连接状态变化 when(it) { WebSocketClient.ConnectionState.Disconnected -> Log.d("WebSocket", "连接已断开") WebSocketClient.ConnectionState.Connecting -> Log.d("WebSocket", "正在连接") WebSocketClient.ConnectionState.Connected -> Log.d("WebSocket", "连接成功") WebSocketClient.ConnectionState.Paused -> Log.d("WebSocket", "连接已暂停") } } // 设置错误回调 webSocketClient.setOnErrorCallback { val errorMsg = it?.message ?: "未知错误" Log.e("WebSocket", "发生错误: $errorMsg") } ``` 3. 连接WebSocket: ```kotlin // 启动连接 webSocketClient.connect() ``` 4. 发送消息: ```kotlin // 发送文本消息 val success = webSocketClient.send("Hello WebSocket") if (success) { Log.d("WebSocket", "消息发送成功") } else { Log.e("WebSocket", "消息发送失败") } ``` 5. 断开连接: ```kotlin // 断开连接 webSocketClient.disconnect() // 暂停连接(临时断开,但保留重连配置) webSocketClient.pause() // 恢复连接 webSocketClient.resume() ``` 6. 清理资源(在Activity或Fragment的onDestroy中调用): ```kotlin // 释放WebSocket资源 webSocketClient.release() ``` ### 高级配置 1. 自定义重连参数: ```kotlin // 配置重连参数 webSocketClient.setReconnectConfig( maxAttempts = 10, // 最大重连次数 baseDelayMs = 1000L, // 基础重连延迟(毫秒) maxDelayMs = 30000L // 最大重连延迟(毫秒) ) ``` 2. 使用自定义OkHttpClient: ```kotlin // 创建自定义OkHttpClient val customClient = OkHttpClient.Builder() .connectTimeout(15, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) // 添加自定义拦截器、证书等 .build() // 使用自定义客户端创建WebSocketClient val webSocketClient = WebSocketClient("ws://your-websocket-server.com:port", customClient) ``` ## 版本历史 - v1.0.0 (2024-XX-XX): 初始版本,包含基本控件和主题系统 - v1.0.3 (2025-08-31): 更新WebSocketClient库,修正包名和Maven坐标 - v1.0.4 (2025-XX-XX): WebSocketClient库更新,添加了device-phone子协议支持 - v1.1.0 (2025-XX-XX): 添加joydlib.dev系统服务模块,包含权限管理、前台服务等功能