一个功能丰富的Android任务管理应用,支持地理位置提醒、语音创建任务和智能工作流集成。本项目展示了现代Android开发的最佳实践和完整技术栈。
- 任务列表:支持查看、筛选(全部/已完成/未完成)和搜索任务
- 任务详情:完整的任务信息展示和编辑功能
- 任务创建:支持手动创建和语音创建两种方式
- 数据持久化:使用Room数据库本地存储
- 语音创建任务:长按按钮录音,自动转换为文本并创建任务
- Whisper集成:本地语音识别,支持中文语音转文字
- 智能工作流:通过AI后端自动解析语音内容生成结构化任务
- 地图选点:在地图上选择任务相关位置
- 地理围栏:进入指定区域自动触发任务提醒
- 高德地图集成:使用高德地图SDK提供定位和地图服务
- 位置权限管理:智能处理位置权限请求
- 时间提醒:基于任务到期时间的定时提醒
- 位置提醒:基于地理围栏的位置触发提醒
- 后台任务:使用WorkManager确保应用被杀死后仍能正常提醒
- 通知管理:支持通知渠道和点击跳转
┌─────────────────────────────────────────┐
│ Presentation │
├─────────────────────────────────────────┤
│ Screens │ ViewModels │ UI Components │
├─────────────────────────────────────────┤
│ Domain │
├─────────────────────────────────────────┤
│ Models │ UseCases │ Repository │
├─────────────────────────────────────────┤
│ Data │
├─────────────────────────────────────────┤
│ Repository Impl │ DataSource │ Services │
└─────────────────────────────────────────┘
- 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-
配置高德地图API密钥
- 在高德开放平台申请API密钥
- 在
app/src/main/AndroidManifest.xml中替换密钥:
<meta-data android:name="com.amap.api.v2.apikey" android:value="YOUR_API_KEY_HERE" />
-
配置后端API(可选)
- 如果需要使用AI工作流功能,配置
kotlin-client模块中的API地址 - 修改
ApiClient配置文件
- 如果需要使用AI工作流功能,配置
-
同步项目
./gradlew build
-
运行应用
- 连接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- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情
- 高德地图 - 提供地图和定位服务
- Whisper - 语音识别引擎
- Jetpack Compose - 现代UI框架
- Hilt - 依赖注入框架
如有问题或建议,请通过以下方式联系:
- 提交 Issue
⭐ 如果这个项目对你有帮助,请给它一个星标!