Skip to content

MoQiii/GeoTask

Repository files navigation

GeoTask - 带地理位置提醒的任务管理应用

Android Kotlin Jetpack Compose MVVM

一个功能丰富的Android任务管理应用,支持地理位置提醒、语音创建任务和智能工作流集成。本项目展示了现代Android开发的最佳实践和完整技术栈。

✨ 核心功能

📝 任务管理

  • 任务列表:支持查看、筛选(全部/已完成/未完成)和搜索任务
  • 任务详情:完整的任务信息展示和编辑功能
  • 任务创建:支持手动创建和语音创建两种方式
  • 数据持久化:使用Room数据库本地存储

🎤 语音功能

  • 语音创建任务:长按按钮录音,自动转换为文本并创建任务
  • Whisper集成:本地语音识别,支持中文语音转文字
  • 智能工作流:通过AI后端自动解析语音内容生成结构化任务

🗺️ 地理位置功能

  • 地图选点:在地图上选择任务相关位置
  • 地理围栏:进入指定区域自动触发任务提醒
  • 高德地图集成:使用高德地图SDK提供定位和地图服务
  • 位置权限管理:智能处理位置权限请求

⏰ 提醒系统

  • 时间提醒:基于任务到期时间的定时提醒
  • 位置提醒:基于地理围栏的位置触发提醒
  • 后台任务:使用WorkManager确保应用被杀死后仍能正常提醒
  • 通知管理:支持通知渠道和点击跳转

🏗️ 技术架构

架构模式

┌─────────────────────────────────────────┐
│              Presentation               │
├─────────────────────────────────────────┤
│  Screens  │  ViewModels  │  UI Components │
├─────────────────────────────────────────┤
│                Domain                   │
├─────────────────────────────────────────┤
│   Models   │  UseCases   │  Repository   │
├─────────────────────────────────────────┤
│                 Data                   │
├─────────────────────────────────────────┤
│ Repository Impl │ DataSource │ Services │
└─────────────────────────────────────────┘

核心技术栈

UI层

  • Jetpack Compose - 现代声明式UI框架
  • Material Design 3 - 最新设计规范
  • Navigation Compose - 页面导航管理
  • Hilt Navigation Compose - 依赖注入集成

架构组件

  • MVVM + Repository - 清晰的架构分层
  • UseCase - 业务逻辑封装
  • Hilt/Dagger - 依赖注入框架
  • Kotlin Coroutines + Flow - 异步编程和响应式数据流

数据层

  • Room Database - 本地数据库存储
  • DataStore - 用户偏好设置存储
  • Repository Pattern - 数据访问抽象

后台服务

  • WorkManager - 后台任务调度
  • GeofencingClient - 地理围栏管理
  • NotificationManager - 通知系统

第三方集成

  • 高德地图SDK - 地图和定位服务
  • Whisper - 本地语音识别
  • OkHttp - 网络请求
  • Timber - 日志记录

📱 应用截图

主要界面

  • 任务列表页面
  • 任务详情页面
  • 地图选点页面
  • 语音录制界面

🚀 快速开始

环境要求

  • Android Studio Arctic Fox 或更高版本
  • Kotlin 1.9+
  • Android SDK API 26+ (Android 8.0+)
  • Gradle 8.0+

克隆项目

git clone https://github.com/MoQiii/GeoTask.git
cd GeoTask

配置步骤

  1. 配置高德地图API密钥

    • 高德开放平台申请API密钥
    • app/src/main/AndroidManifest.xml 中替换密钥:
    <meta-data
        android:name="com.amap.api.v2.apikey"
        android:value="YOUR_API_KEY_HERE" />
  2. 配置后端API(可选)

    • 如果需要使用AI工作流功能,配置 kotlin-client 模块中的API地址
    • 修改 ApiClient 配置文件
  3. 同步项目

    ./gradlew build
  4. 运行应用

    • 连接Android设备或启动模拟器
    • 点击Android Studio的运行按钮

📁 项目结构

GeoTask/
├── app/
│   ├── src/main/java/com/syj/geotask/
│   │   ├── presentation/          # UI层
│   │   │   ├── screens/           # 页面
│   │   │   ├── viewmodel/         # ViewModel
│   │   │   └── ui-components/     # UI组件
│   │   ├── domain/                # 领域层
│   │   │   ├── model/             # 数据模型
│   │   │   ├── repository/        # 仓储接口
│   │   │   └── usecase/           # 用例
│   │   ├── data/                  # 数据层
│   │   │   ├── repository/        # 仓储实现
│   │   │   ├── datasource/        # 数据源
│   │   │   ├── service/           # 服务
│   │   │   └── receiver/          # 广播接收器
│   │   ├── speech/                # 语音识别
│   │   ├── utils/                 # 工具类
│   │   └── di/                    # 依赖注入
│   ├── libs/                      # 本地库文件
│   └── assets/                    # 资源文件
├── kotlin-client/                 # API客户端模块
├── gradle/                        # Gradle配置
└── docs/                          # 文档

🔧 核心功能实现

语音创建任务流程

// 1. 长按按钮开始录音
button.onLongPress {
    voiceTaskManager.startRecording()
}

// 2. 松开按钮结束录音并处理
button.onRelease {
    voiceTaskManager.stopRecording { audioFile ->
        // 3. 语音转文字
        speechToTextManager.recognize(audioFile) { text ->
            // 4. 调用AI工作流
            aiControllerApi.createTask(text) { task ->
                // 5. 保存任务并刷新界面
                taskRepository.insert(task)
            }
        }
    }
}

地理围栏提醒

// 创建地理围栏
geofenceManager.createGeofence(
    latitude = task.latitude,
    longitude = task.longitude,
    radius = task.geofenceRadius
) { geofenceId ->
    // 注册地理围栏
    geofencingClient.addGeofences(geofenceRequest, pendingIntent)
}

// 地理围栏触发处理
class GeofenceBroadcastReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        // 发送任务提醒通知
        notificationManager.showTaskNotification(task)
    }
}

📋 权限说明

应用需要以下权限:

权限 用途 必需性
ACCESS_FINE_LOCATION 精确定位 必需
ACCESS_COARSE_LOCATION 粗略定位 必需
ACCESS_BACKGROUND_LOCATION 后台定位 可选
RECORD_AUDIO 录音功能 必需
POST_NOTIFICATIONS 发送通知 必需
INTERNET 网络访问 必需

🧪 测试

单元测试

./gradlew test

集成测试

./gradlew connectedAndroidTest

📚 相关文档

🤝 贡献指南

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情

🙏 致谢

📞 联系方式

如有问题或建议,请通过以下方式联系:


⭐ 如果这个项目对你有帮助,请给它一个星标!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published