expo-gaode-map-navigation 2.0.10 → 2.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +54 -2
  2. package/android/build.gradle +4 -0
  3. package/android/src/main/AndroidManifest.xml +2 -1
  4. package/android/src/main/java/expo/modules/gaodemap/navigation/ExpoGaodeMapNaviView.kt +501 -27
  5. package/android/src/main/java/expo/modules/gaodemap/navigation/ExpoGaodeMapNaviViewModule.kt +35 -0
  6. package/android/src/main/java/expo/modules/gaodemap/navigation/ExpoGaodeMapNavigationModule.kt +10 -23
  7. package/android/src/main/java/expo/modules/gaodemap/navigation/listeners/IndependentRouteListener.kt +24 -0
  8. package/android/src/main/java/expo/modules/gaodemap/navigation/managers/IndependentRouteManager.kt +24 -7
  9. package/android/src/main/java/expo/modules/gaodemap/navigation/routes/drive/DriveTruckRouteCalculator.kt +22 -35
  10. package/android/src/main/java/expo/modules/gaodemap/navigation/services/IndependentRouteService.kt +45 -35
  11. package/android/src/main/java/expo/modules/gaodemap/navigation/services/NavigationForegroundService.kt +661 -0
  12. package/android/src/main/java/expo/modules/gaodemap/navigation/utils/Converters.kt +2 -2
  13. package/android/src/main/res/drawable/ic_nav_notification_small.xml +10 -0
  14. package/android/src/main/res/drawable/nav_notification_brand_icon.xml +16 -0
  15. package/android/src/main/res/drawable/navi_lane_shape_bg_center.xml +4 -4
  16. package/android/src/main/res/drawable/navi_lane_shape_bg_left.xml +7 -7
  17. package/android/src/main/res/drawable/navi_lane_shape_bg_over.xml +5 -5
  18. package/android/src/main/res/drawable/navi_lane_shape_bg_right.xml +7 -7
  19. package/android/src/main/res/drawable-nodpi/nav_tracker_car.png +0 -0
  20. package/build/ExpoGaodeMapNaviView.d.ts +9 -1
  21. package/build/ExpoGaodeMapNaviView.d.ts.map +1 -1
  22. package/build/ExpoGaodeMapNaviView.js +39 -3
  23. package/build/ExpoGaodeMapNaviView.js.map +1 -1
  24. package/build/index.d.ts +32 -6
  25. package/build/index.d.ts.map +1 -1
  26. package/build/index.js +32 -6
  27. package/build/index.js.map +1 -1
  28. package/build/types/independent.types.d.ts +18 -3
  29. package/build/types/independent.types.d.ts.map +1 -1
  30. package/build/types/independent.types.js.map +1 -1
  31. package/build/types/naviview.types.d.ts +49 -3
  32. package/build/types/naviview.types.d.ts.map +1 -1
  33. package/build/types/naviview.types.js.map +1 -1
  34. package/build/types/route.types.d.ts +10 -2
  35. package/build/types/route.types.d.ts.map +1 -1
  36. package/build/types/route.types.js.map +1 -1
  37. package/ios/ExpoGaodeMapNaviView.swift +1526 -246
  38. package/ios/ExpoGaodeMapNaviViewModule.swift +22 -0
  39. package/ios/ExpoGaodeMapNavigationModule.swift +6 -4
  40. package/ios/managers/IndependentRouteManager.swift +89 -26
  41. package/ios/map/ExpoGaodeMapModule.swift +25 -11
  42. package/ios/map/modules/LocationManager.swift +10 -1
  43. package/ios/map/utils/PermissionManager.swift +104 -0
  44. package/ios/routes/drive/DriveTruckRouteCalculator.swift +157 -78
  45. package/ios/routes/walkride/WalkRideRouteCalculator.swift +97 -1
  46. package/ios/services/IndependentRouteService.swift +165 -32
  47. package/ios/services/NavigationLiveActivityAttributes.swift +48 -0
  48. package/ios/services/NavigationLiveActivityManager.swift +359 -0
  49. package/package.json +2 -1
  50. package/plugin/build/withGaodeMap.d.ts +8 -0
  51. package/plugin/build/withGaodeMap.js +48 -4
  52. package/widget-template/README.md +46 -0
  53. package/widget-template/ios/NavigationLiveActivityWidget.swift +367 -0
package/README.md CHANGED
@@ -29,6 +29,13 @@ npm install expo-gaode-map-navigation
29
29
  **⚠️ 重要提示:**
30
30
  如果项目中已安装 `expo-gaode-map`,请务必先卸载,否则会导致 Android 端二进制冲突(`3dmap` vs `navi-3dmap`)。`expo-gaode-map` 和 `expo-gaode-map-navigation` 由于 SDK 冲突不能同时安装,二选一使用。
31
31
 
32
+ > ⚠️ **版本兼容性说明**:
33
+ > - 如果你的项目使用 **Expo SDK 54 及以上**,请安装 默认的 版本。
34
+ > - 如果你的项目使用 **Expo SDK 53 及以下**(如 50, 51, 52, 53),请使用 **V1** 版本(Tag: `v1`)。
35
+ > ```bash
36
+ > npm install expo-gaode-map-navigation@1.1.8
37
+ > ```
38
+
32
39
 
33
40
  ### Config Plugin 配置(推荐)
34
41
 
@@ -42,7 +49,12 @@ npm install expo-gaode-map-navigation
42
49
  "expo-gaode-map-navigation",
43
50
  {
44
51
  "androidKey": "your-android-key",
45
- "iosKey": "your-ios-key"
52
+ "iosKey": "your-ios-key",
53
+ "enableBackgroundLocation": true,
54
+ "enableBackgroundAudio": true,
55
+ "enableNavigationNotification": true,
56
+ "enableIOSLiveActivity": true,
57
+ "enableIOSLiveActivityFrequentUpdates": true
46
58
  }
47
59
  ]
48
60
  ]
@@ -57,6 +69,15 @@ npx expo run:android
57
69
  npx expo run:ios
58
70
  ```
59
71
 
72
+ 说明:
73
+
74
+ - `enableNavigationNotification` 仅 Android 生效,用于注入导航前台通知所需权限与 `NavigationForegroundService` 声明。
75
+ - `enableBackgroundAudio` 仅 iOS 生效(默认随 `enableBackgroundLocation` 自动开启),用于注入 `UIBackgroundModes: audio`,保障后台导航语音持续播报。
76
+ - `enableIOSLiveActivity` 仅 iOS 生效,用于注入 `NSSupportsLiveActivities`。
77
+ - `enableIOSLiveActivityFrequentUpdates` 仅 iOS 生效,用于注入 `NSSupportsLiveActivitiesFrequentUpdates`。
78
+ - 运行时还需要在 `NaviView` 里显式传 `androidBackgroundNavigationNotificationEnabled={true}` 才会在应用退到后台后显示导航常驻通知。
79
+ - iOS 运行时还需要在 `NaviView` 里显式传 `iosLiveActivityEnabled={true}` 才会持续更新 Live Activity。
80
+
60
81
  ## 示例工程
61
82
 
62
83
  仓库内提供了可直接运行的 [`example-navigation`](/Volumes/xinxin/expo-gaode-map/example-navigation/README.md) 示例工程,专门用于验证导航能力。
@@ -86,6 +107,30 @@ npx pod-install ios
86
107
  npx expo run:ios
87
108
  ```
88
109
 
110
+ ### iOS Live Activity Widget Extension
111
+
112
+ `iosLiveActivityEnabled` 只负责从导航回调里请求/更新 ActivityKit 状态。
113
+ 真正显示在锁屏/灵动岛的 UI,需要你在 App 里提供 Widget Extension 的 `ActivityConfiguration`。
114
+
115
+ 仓库已提供模板:
116
+
117
+ - [`packages/navigation/widget-template/README.md`](/Volumes/xinxin/expo-gaode-map/packages/navigation/widget-template/README.md)
118
+ - [`packages/navigation/widget-template/ios/NavigationLiveActivityWidget.swift`](/Volumes/xinxin/expo-gaode-map/packages/navigation/widget-template/ios/NavigationLiveActivityWidget.swift)
119
+
120
+ 模板里直接使用库导出的 `NavigationLiveActivityAttributes`(`import ExpoGaodeMapNavigation`)。
121
+
122
+ #### iOS Live Activity 行为说明(补充)
123
+
124
+ - 导航进行中会持续推送实时状态到锁屏/灵动岛(前提是已启用 `iosLiveActivityEnabled` 且 Widget Extension 配置正确)。
125
+ - 到达目的地后,模块会先更新卡片为“到达目的地”,再延时约 6 秒自动结束 Live Activity。
126
+ - 为避免 ActivityKit `Payload maximum size exceeded`:
127
+ - 模块会优先保留转向图标,先裁剪文案字段;
128
+ - 如仍超限,才会降级去掉图标,确保状态更新不中断。
129
+ - 调试日志关键字:
130
+ - `payload ... keeping turn icon`
131
+ - `payload still too large ... dropped turn icon`
132
+ - `arrived destination card displayed for ... stopping activity`
133
+
89
134
 
90
135
  ## 快速开始
91
136
 
@@ -151,6 +196,8 @@ export default function NavigationScreen() {
151
196
  style={{ flex: 1 }}
152
197
  showCamera={true} // 显示摄像头
153
198
  enableVoice={true} // 开启语音
199
+ androidBackgroundNavigationNotificationEnabled={true} // Android 后台导航常驻通知(需配合插件 enableNavigationNotification)
200
+ iosLiveActivityEnabled={true} // iOS Live Activity 状态更新(需配合插件 enableIOSLiveActivity + Widget Extension)
154
201
  />
155
202
  </View>
156
203
  );
@@ -483,6 +530,7 @@ const result = await calculateTransitRoute({
483
530
  | `realCrossDisplay` | boolean | 是否显示路口放大图 |
484
531
  | `showCamera` | boolean | 是否显示摄像头 |
485
532
  | `carImage` | string \| ImageSourcePropType | 自定义导航车标;iOS 映射 `setCarImage`,Android 映射 `setCarBitmap` |
533
+ | `carImageSize` | object | 自定义导航车标尺寸,格式 `{ width, height }`(单位 dp/pt,需同时传宽高) |
486
534
  | `startPointImage` | string \| ImageSourcePropType | 自定义起点标注图 |
487
535
  | `wayPointImage` | string \| ImageSourcePropType | 自定义途经点标注图 |
488
536
  | `endPointImage` | string \| ImageSourcePropType | 自定义终点标注图 |
@@ -490,9 +538,12 @@ const result = await calculateTransitRoute({
490
538
  | `showTrafficButton` | boolean | 是否显示交通按钮/交通图层开关 |
491
539
  | `showDriveCongestion` | boolean | 是否显示拥堵气泡 |
492
540
  | `showTrafficLightView` | boolean | 是否显示红绿灯倒计时气泡 |
541
+ | `mapViewModeType` | number | 地图样式模式:`0` 白天、`1` 黑夜、`2` 自动、`3` 自定义(Android 当前未开放样式路径时会降级为白天) |
542
+ | `isNightMode` | boolean | 兼容属性,等价于 `mapViewModeType` 的 `1/0`;若同时传 `mapViewModeType`,以后者为准 |
493
543
  | `showUIElements` | boolean | Android / iOS 均支持整体 UI 显隐 |
494
544
  | `laneInfoVisible` | boolean | Android 是否显示官方车道信息 |
495
545
  | `hideNativeLaneInfoLayout` | boolean | iOS 是否隐藏官方车道信息条,交给 RN 自绘 |
546
+ | `iosLiveActivityEnabled` | boolean | iOS 是否启用导航 Live Activity 状态更新(需已配置 Widget Extension) |
496
547
  | `modeCrossDisplay` | boolean | Android 是否显示 3D 路口模型;iOS 当前不支持,会忽略 |
497
548
  | `eyrieCrossDisplay` | boolean | Android 是否显示鹰眼路口图 |
498
549
  | `secondActionVisible` | boolean | Android 是否显示辅助操作区域 |
@@ -503,6 +554,7 @@ const result = await calculateTransitRoute({
503
554
  | `lockTilt` | number | Android 锁车态倾斜角度 |
504
555
  | `eagleMapVisible` | boolean | Android 是否显示鹰眼小地图 |
505
556
  | `pointToCenter` | object | Android 锁车态自车锚点位置 |
557
+ | `androidBackgroundNavigationNotificationEnabled` | boolean | Android 退到后台时是否启用前台服务导航常驻通知(默认 false) |
506
558
  | `driveViewEdgePadding` | object | iOS 导航内容边距 |
507
559
  | `screenAnchor` | object | iOS 地图视图锚点 |
508
560
  | `showBackupRoute` | boolean | iOS 是否显示备选路线 |
@@ -523,6 +575,7 @@ const result = await calculateTransitRoute({
523
575
  - `realCrossDisplay`
524
576
  - `naviMode`
525
577
  - `showMode`
578
+ - `mapViewModeType`
526
579
  - `isNightMode`
527
580
  - `showTrafficBar`
528
581
  - `showTrafficButton`
@@ -561,7 +614,6 @@ const result = await calculateTransitRoute({
561
614
  - `trafficBarFrame`
562
615
  - `trafficBarColors`
563
616
  - `showMoreButton`
564
- - `mapViewModeType`
565
617
  - `lineWidth`
566
618
  - `driveViewEdgePadding`
567
619
  - `screenAnchor`
@@ -65,4 +65,8 @@ dependencies {
65
65
  } else {
66
66
  implementation 'com.amap.api:navi-3dmap:latest.integration'
67
67
  }
68
+
69
+ // Live Update APIs on NotificationCompat.Builder
70
+ // setRequestPromotedOngoing / setShortCriticalText were added in androidx.core 1.17.0.
71
+ implementation 'androidx.core:core-ktx:1.17.0'
68
72
  }
@@ -16,8 +16,9 @@
16
16
 
17
17
  <!-- 设备信息权限 - SDK 初始化必需 -->
18
18
  <uses-permission android:name="android.permission.READ_PHONE_STATE" />
19
+ <uses-permission android:name="android.permission.WAKE_LOCK" />
19
20
 
20
21
  <!-- 蓝牙权限 - 用于室内定位 (可选) -->
21
22
  <uses-permission android:name="android.permission.BLUETOOTH" />
22
23
  <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
23
- </manifest>
24
+ </manifest>