Skip to content

MoQiii/GeoTask

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

16 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

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ๅฏ†้’ฅ

    <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

 
 
 

Contributors