{"id":"0de45201-fa7d-4e05-9008-5e5d05a4c45e","entityType":"agent","slug":"clawhub-baidu-maps-baidu-map-android-sdk","name":"Baidu Map Android SDK（百度地图官方安卓 SKills）","canonicalUrl":"https://www.xpersona.co/agent/clawhub-baidu-maps-baidu-map-android-sdk","canonicalPath":"/agent/clawhub-baidu-maps-baidu-map-android-sdk","generatedAt":"2026-10-10T15:50:57.345Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T13:51:31.286Z","emptyReason":null},"description":"百度地图 Android SDK 集成与开发规范。覆盖地图展示、MapView/BaiduMap 生命周期、定位、标注与覆盖物、POI 检索、路线规划、步骑行导航；输出符合隐私与 AK 配置的 Android 地图方案。在开发 Android 地图应用、集成百度地图 SDK、MapView、路线规划、POI、导航... Skill: Baidu Map Android SDK（百度地图官方安卓 SKills） Owner: baidu-maps Summary: 百度地图 Android SDK 集成与开发规范。覆盖地图展示、MapView/BaiduMap 生命周期、定位、标注与覆盖物、POI 检索、路线规划、步骑行导航；输出符合隐私与 AK 配置的 Android 地图方案。在开发 Android 地图应用、集成百度地图 SDK、MapView、路线规划、POI、导航... Tags: latest:1.0.3 Version history: v1.0.3 | 2026-06-01T03:41:59.477Z | user - Removed sample files: _meta.json, skill-card.md - No changes to core logic or documentation in SKILL.md v1.","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.4K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s178nge8tvzzhnan6cc08q0ech84dmtm:baidu-map-android-sdk","sourceUrl":"https://clawhub.ai/baidu-maps/baidu-map-android-sdk","homepage":"https://clawhub.ai/baidu-maps/skills/baidu-map-android-sdk","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/baidu-maps/baidu-map-android-sdk","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/baidu-maps/skills/baidu-map-android-sdk","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":63,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"百度地图 Android SDK 集成与开发规范。覆盖地图展示、MapView/BaiduMap 生命周期、定位、标注与覆盖物、POI 检索、路线规划、步骑行导航；输出符合隐私与 AK 配置的 Android 地图方案。在开发 Android 地图应用、集成百度地图 SDK、MapView、路线规划、POI、导航..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T13:51:31.286Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T13:51:31.286Z","emptyReason":null},"stars":null,"forks":null,"downloads":1403,"packageName":null,"latestVersion":"1.0.3","tractionLabel":"1.4K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T13:51:31.286Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T13:51:31.286Z","lastCrawledAt":"2026-10-10T13:51:31.286Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T13:51:31.286Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.3","createdAt":"2026-06-01T03:41:59.477Z","changelog":"- Removed sample files: _meta.json, skill-card.md - No changes to core logic or documentation in SKILL.md","fileCount":18,"zipByteSize":36636},{"version":"1.0.2","createdAt":"2026-04-07T04:08:26.806Z","changelog":"- 新增 _meta.json 文件以补充元数据。 - 其余内容无变化。","fileCount":18,"zipByteSize":36289},{"version":"1.0.1","createdAt":"2026-03-11T08:56:43.336Z","changelog":"- No changes detected in files for this version. - No updates to functionality, documentation, or configuration.","fileCount":17,"zipByteSize":34922},{"version":"1.0.0","createdAt":"2026-03-11T08:52:05.972Z","changelog":"baidu-map-android-sdk 1.0.0 初始版本发布 - 提供百度地图 Android SDK 集成与开发规范，覆盖地图展示、定位、标注与覆盖物、POI 检索、路线规划、步骑行导航等关键场景 - 规范隐私合规、AK 配置、MapView 生命周期、坐标系等使用规则 - 指定开发流程：需求匹配 → 参考文档 → 配置依赖 → 关键 API → 示例 → 注意事项 - 提供各功能模块详细文档索引，便于按需查找和组合","fileCount":17,"zipByteSize":34921}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s178nge8tvzzhnan6cc08q0ech84dmtm:baidu-map-android-sdk","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-baidu-maps-baidu-map-android-sdk/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-baidu-maps-baidu-map-android-sdk/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-baidu-maps-baidu-map-android-sdk/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-baidu-maps-baidu-map-android-sdk/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-baidu-maps-baidu-map-android-sdk/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-baidu-maps-baidu-map-android-sdk/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T15:50:57.342Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-baidu-maps-baidu-map-android-sdk/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-baidu-maps-baidu-map-android-sdk/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-baidu-maps-baidu-map-android-sdk/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-baidu-maps-baidu-map-android-sdk/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T13:51:31.286Z","emptyReason":null},"readme":"Skill: Baidu Map Android SDK（百度地图官方安卓 SKills）\n\nOwner: baidu-maps\n\nSummary: 百度地图 Android SDK 集成与开发规范。覆盖地图展示、MapView/BaiduMap 生命周期、定位、标注与覆盖物、POI 检索、路线规划、步骑行导航；输出符合隐私与 AK 配置的 Android 地图方案。在开发 Android 地图应用、集成百度地图 SDK、MapView、路线规划、POI、导航...\n\nTags: latest:1.0.3\n\nVersion history:\n\nv1.0.3 | 2026-06-01T03:41:59.477Z | user\n\n- Removed sample files: _meta.json, skill-card.md\n- No changes to core logic or documentation in SKILL.md\n\nv1.0.2 | 2026-04-07T04:08:26.806Z | user\n\n- 新增 _meta.json 文件以补充元数据。\n- 其余内容无变化。\n\nv1.0.1 | 2026-03-11T08:56:43.336Z | auto\n\n- No changes detected in files for this version.\n- No updates to functionality, documentation, or configuration.\n\nv1.0.0 | 2026-03-11T08:52:05.972Z | user\n\nbaidu-map-android-sdk 1.0.0 初始版本发布\n\n- 提供百度地图 Android SDK 集成与开发规范，覆盖地图展示、定位、标注与覆盖物、POI 检索、路线规划、步骑行导航等关键场景\n- 规范隐私合规、AK 配置、MapView 生命周期、坐标系等使用规则\n- 指定开发流程：需求匹配 → 参考文档 → 配置依赖 → 关键 API → 示例 → 注意事项\n- 提供各功能模块详细文档索引，便于按需查找和组合\n\nArchive index:\n\nArchive v1.0.3: 18 files, 36636 bytes\n\nFiles: references/class-reference.md (4934b), references/coordinate.md (1733b), references/errorcode.md (1660b), references/gradle.md (4754b), references/location.md (2574b), references/mapview.md (4649b), references/marker.md (2319b), references/overlays.md (2110b), references/overview.md (5331b), references/project-config.md (6608b), references/reference.md (5559b), references/route.md (4475b), references/search.md (3735b), references/tools.md (3596b), references/ui-standards.md (7893b), skill-card.md (3156b), SKILL.md (5526b), _meta.json (140b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: baidu-map-android-sdk\ndescription: 百度地图 Android SDK 集成与开发规范。覆盖地图展示、MapView/BaiduMap 生命周期、定位、标注与覆盖物、POI 检索、路线规划、步骑行导航；输出符合隐私与 AK 配置的 Android 地图方案。在开发 Android 地图应用、集成百度地图 SDK、MapView、路线规划、POI、导航时使用。\ncompatibility: Android, Gradle, Android Studio\n---\n\n# 百度地图 Android SDK\n\n## 目标与边界\n\n- **目标**：在 Android 工程中正确集成百度地图 SDK，并给出符合隐私、AK、坐标系规范的实现方案。\n- **负责**：地图展示、MapView 生命周期、覆盖物、POI/路线/地理编码检索、步骑行导航等；以技能内 references 为准。\n- **不负责**：服务端逻辑、非百度 SDK、UI 视觉设计。\n\n## 使用时机\n\n满足其一即启用本技能：\n\n- 关键词：百度地图 Android、MapView、BaiduMap、AK、路线规划、POI 检索、步骑行导航、BD09、坐标类型\n- 需求类型：地图展示、定位、标注与覆盖物、POI/地点检索、路线规划与画线、步行/骑行实时导航、地理编码\n\n**按需加载**：先根据需求在 [reference.md](references/reference.md) 中选定文档，再引用对应 references 内容；需求含糊时先向用户澄清**再给方案**。\n\n## 必须遵守的规则\n\n1. **隐私与初始化（v7.5.0+）**\n   - 调用 SDK 任何接口前必须先调用隐私合规接口，且**必须在 `SDKInitializer.initialize` 之前**调用。见 [overview.md](references/overview.md) 隐私合规小节。\n   - Application 中：`SDKInitializer.initialize(this)`；自 4.3.0 起可用 `SDKInitializer.setCoordType(CoordType.BD09LL)` 或 `CoordType.GCJ02`。\n\n2. **AK 与配置**\n   - 使用前需在控制台申请 Android SDK 密钥（AK），应用类型选「Android SDK」，填写包名、SHA1。AK 配置到 AndroidManifest 或 `SDKInitializer.setApiKey`；包名与签名须与申请一致。见 [overview.md](references/overview.md)。\n\n3. **MapView 生命周期**\n   - Activity 的 `onResume`/`onPause`/`onDestroy` 中必须分别调用 `mMapView.onResume()`、`mMapView.onPause()`、`mMapView.onDestroy()`。见 [mapview.md](references/mapview.md)。\n\n4. **坐标系**\n   - 国内默认 BD09LL；可与 GCJ02 通过 `SDKInitializer.setCoordType` 统一。与定位混用时与定位 SDK 坐标类型一致；转换见 [coordinate.md](references/coordinate.md)。\n\n5. **检索与路线**\n   - **监听先于请求**：先 `setOnGetPoiSearchResultListener` 再 `searchNearby` 等；先 `setOnGetRoutePlanResultListener` 再 `drivingSearch` 等，否则可能拿不到回调。用完后 `destroy()` 释放实例。\n\n6. **版本与 API 以工程为准**\n   - 用户已集成 SDK 时，以其实机/工程内版本为准。若某类或方法**不存在**（编译报错或依赖中无此符号），**提示用户将对应依赖更新到兼容版本**后再重试，勿强行写不存在的 API。\n\n7. **步骑行：按需求区分**\n   - **路线规划（算路+画线）**：RoutePlanSearch（驾车/步行/骑行/公交），得到路线后自绘折线或使用开源 Overlay。见 [route.md](references/route.md)。\n   - **步骑行实时导航**：步行/骑行导航引擎、诱导、TTS、偏航纠偏等，类见 [overview.md](references/overview.md) 与 [class-reference.md](references/class-reference.md)。\n   - 二者是**不同服务**：仅需画线用 route；需实时诱导/TTS 用步骑行导航。给出方案前先按开发者需求选对文档。\n\n## 输出规范（可评估）\n\n- **可落地**：含具体类名、方法、调用顺序与必要配置（AndroidManifest、Application、AK、隐私）。\n- **可验证**：隐私与 AK 明确；检索/路线监听顺序正确；若涉及定位/鉴权失败，方案可指向 [location.md](references/location.md) 或 [project-config.md](references/project-config.md) 的排查项。\n- **可组合**：按 [reference.md](references/reference.md) 选文档与常见组合。无特殊要求时界面与交互遵循 [ui-standards.md](references/ui-standards.md)。\n\n方案结构：需求 → 对应文档 → 配置与依赖 → 关键 API → 示例片段 → 注意事项。\n\n## 参考索引\n\n- 按需求选文档与常见组合：[reference.md](references/reference.md)\n- Gradle 集成（依赖、冲突、NDK、环境与国内镜像）：[gradle.md](references/gradle.md)\n- AndroidManifest、主题、混淆、集成经验与常见问题：[project-config.md](references/project-config.md)\n- 集成、AK、隐私、生命周期、核心类：[overview.md](references/overview.md)\n- 地图容器、类型、层级、方法交互：[mapview.md](references/mapview.md)\n- 显示定位、定位模式、自定义图标：[location.md](references/location.md)\n- 点标记、Marker 属性与事件：[marker.md](references/marker.md)\n- 折线、多边形、Polyline 属性：[overlays.md](references/overlays.md)\n- POI、地理编码、逆地理：[search.md](references/search.md)\n- 路线规划与 Overlay：[route.md](references/route.md)\n- 坐标转换与坐标系：[coordinate.md](references/coordinate.md)\n- 距离/面积、点与图形关系、调起地图、短地址分享：[tools.md](references/tools.md)\n- 错误码：[errorcode.md](references/errorcode.md)\n- 类与包速查：[class-reference.md](references/class-reference.md)\n- 检索/路线/选点/弹窗/Logo 等 UI 与交互约定：[ui-standards.md](references/ui-standards.md)\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn778b6bf766ym71fdvrc5yvg98319rv\",\n  \"slug\": \"baidu-map-android-sdk\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1780285319477\n}\n\nFile v1.0.3:references/class-reference.md\n\n# 类与包速查\n\n以下为百度地图 Android SDK 常用类与包，便于按能力查找。具体方法、参数以工程所集成的 SDK 版本为准。\n\n## 初始化与配置\n\n- `com.baidu.mapapi.SDKInitializer`：initialize、setApiKey、setCoordType、setAgreePrivacy、getCoordType\n- `com.baidu.mapapi.CoordType`：BD09LL、GCJ02\n\n## 地图容器与控制器\n\n- `com.baidu.mapapi.map.MapView`、`BaiduMap`、`getMap()`、onResume/onPause/onDestroy\n- `com.baidu.mapapi.map.SupportMapFragment`、`TextureMapView`、`TextureSupportMapFragment`\n- `com.baidu.mapapi.map.BaiduMapOptions`：mapType、compassEnable、zoomGesturesEnabled 等\n\n## 地图状态与视野\n\n- `MapStatus`、`MapStatus.Builder`、`MapStatusUpdate`、`MapStatusUpdateFactory`\n- `MapStatusUpdateFactory.zoomTo/zoomIn/zoomOut/zoomBy`、`newLatLng`、`newLatLngBounds`、`newMapStatus`\n- `BaiduMap`：setMapStatus、animateMapStatus、setMapType、setTrafficEnabled、setBaiduHeatMapEnabled、setViewPadding、showMapPoi、setPoiTagEnable、setMapBackgroundColor\n\n## 几何与覆盖物基础\n\n- `com.baidu.mapapi.model.LatLng`、`LatLngBounds`、`LatLngBounds.Builder`\n- `com.baidu.mapapi.map.BitmapDescriptor`、`BitmapDescriptorFactory`\n- `OverlayOptions`、`Overlay`、`BaiduMap.addOverlay`、`clear`\n- `Marker`、`MarkerOptions`：position、icon、draggable、flat、alpha、animateType、titleOptions、isJoinCollision、poiCollided 等\n- `Polyline`、`PolylineOptions`：points、width、color、dottedLine、colorsValues、customTextureList、textureIndex、isGeodesic、isGradient、bloomType 等\n- `Polygon`、`PolygonOptions`\n\n## 事件监听\n\n- `BaiduMap.OnMarkerClickListener`、`OnMarkerDragListener`、`OnPolylineClickListener`、`OnMapLoadedCallback`\n\n## 定位\n\n- `com.baidu.location.LocationClient`、`LocationClientOption`、`BDAbstractLocationListener`、`BDLocation`\n- `com.baidu.mapapi.map.MyLocationData`、`MyLocationConfiguration`、`LocationMode`（NORMAL、FOLLOWING、COMPASS）\n- `BaiduMap`：setMyLocationEnabled、setMyLocationData、setMyLocationConfiguration\n\n## 检索\n\n- `com.baidu.mapapi.search.poi.PoiSearch`、`PoiSearch.newInstance()`、setOnGetPoiSearchResultListener、searchInCity、searchNearby、searchInBound、searchPoiDetail、destroy\n- `PoiCitySearchOption`、`PoiNearbySearchOption`、`PoiBoundSearchOption`、`PoiDetailSearchOption`\n- `OnGetPoiSearchResultListener`、`PoiResult`、`PoiDetailSearchResult`、`PoiInfo`\n- `com.baidu.mapapi.search.geocode.GeoCoder`、`GeoCodeOption`、`ReverseGeoCodeOption`、`OnGetGeoCoderResultListener`、`GeoCodeResult`、`ReverseGeoCodeResult`\n\n## 路线规划\n\n- `com.baidu.mapapi.search.route.RoutePlanSearch`、`RoutePlanSearch.newInstance()`、setOnGetRoutePlanResultListener、drivingSearch、walkingSearch、ridingSearch、transitSearch、destroy\n- `PlanNode`、`PlanNode.withCityNameAndPlaceName`、`PlanNode.withLocation`\n- `DrivingRoutePlanOption`、`WalkingRoutePlanOption`、`BikingRoutePlanOption`、`TransitRoutePlanOption`\n- `OnGetRoutePlanResultListener`、`DrivingRouteResult`、`WalkingRouteResult`、`BikingRouteResult`、`TransitRouteResult`、`getRouteLines()`\n- 开源 Overlay：DrivingRouteOverlay、WalkingRouteOverlay、BikingRouteOverlay、TransitRouteOverlay、PoiOverlay（overlayutil 包）\n\n## 步骑行导航（实时诱导）\n\n- WalkNavigateHelper、BikeNavigateHelper、WalkNaviLaunchParam、BikeNaviLaunchParam、initNaviEngine、routePlanWithParams、onCreate（诱导 View）、startWalkNavi/startBikeNavi、setRouteGuidanceListener、setTTsPlayer、resume/pause/quit\n\n## 坐标转换\n\n- `com.baidu.mapapi.utils.CoordinateConverter`、`CoordType.GPS`、`COMMON`、`BD09MC` 等、`from()`、`coord()`、`convert()`\n\n## 室内图\n\n- `BaiduMap.setOnBaseIndoorMapListener`、`switchBaseIndoorMapFloor`、MapBaseIndoorMapInfo、SwitchFloorError\n\n## 投影与 3D Marker\n\n- `BaiduMap.getProjection()`、`projection.geoPoint3toScreenLocation(LatLng, height)`、`fromScreenLocation(Point)`\n\n## 工具（BaiduMapSDK_Util）\n\n- **距离与面积**：`DistanceUtil.getDistance(LatLng, LatLng)` 返回米；`AreaUtil.calculateArea(LatLng northeast, LatLng southwest)` 返回平方米。\n- **点与图形**：`SpatialRelationUtil.isCircleContainsPoint(center, radius, point)`、`isPolygonContainsPoint(points, pt)`、`getNearestPointFromLine(points, pt)`。\n- **调起百度地图**：`BaiduMapRoutePlan`（RouteParaOption、openBaiduMapTransitRoute 等）、`BaiduMapNavigation`（NaviParaOption、openBaiduMapWalkNavi 等）、`BaiduMapPoiSearch`（PoiParaOption、openBaiduMapPoiNearbySearch、openBaiduMapPoiDetialsPage、openBaiduMapPanoShow），调起后调用对应 `finish(context)`。\n- **短地址分享**：`ShareUrlSearch`、OnGetShareUrlResultListener、PoiDetailShareURLOption、LocationShareURLOption、RouteShareURLOption、requestPoiDetailShareUrl/requestLocationShareUrl/requestRouteShareUrl，ShareUrlResult.getUrl()，destroy()。\n\nFile v1.0.3:references/coordinate.md\n\n# 坐标转换与坐标系\n\n## 坐标系类型\n\n- **WGS84**：GPS 常用大地坐标系。\n- **GCJ02**：国测局坐标系，由 WGS84 加密。\n- **BD09**：百度坐标系，在 GCJ02 上再次加密。BD09LL 为百度经纬度，BD09MC 为百度墨卡托米制。\n- 国内（含港澳台）：地图 SDK 默认输入输出 BD09LL；可全局声明为 GCJ02，则全应用输入/输出为 GCJ02。海外统一 WGS84。\n- 定位 SDK 默认输出 GCJ02；与地图混用时需统一，通常地图设为 BD09LL 且定位设置 `setCoorType(\"bd09ll\")`，或地图设为 GCJ02。\n\n## 全局坐标类型（自 4.3.0）\n\n- `SDKInitializer.setCoordType(CoordType.BD09LL);` 或 `CoordType.GCJ02;` 声明全局类型。\n- `SDKInitializer.getCoordType();` 获取当前类型。\n- 自动转换仅适用于国内 GCJ02 输入；海外用 WGS84 无需转换。\n\n## 通用坐标转换（CoordinateConverter）\n\n- 将 WGS84/GCJ02 等转为 BD09LL（或当前声明的类型），需使用 SDK 提供的 CoordinateConverter，勿用非官方算法。\n- 示例（其它坐标系 → 百度经纬度）：\n  - 高德/腾讯等（COMMON）：`CoordinateConverter().from(CoordType.COMMON).coord(sourceLatLng).convert();`\n  - GPS 设备原始坐标：`CoordinateConverter().from(CoordinateConverter.CoordType.GPS).coord(sourceLatLng).convert();`\n- BD09MC → BD09LL：`from(CoordType.BD09MC).coord(sourceLatLng).convert();`\n- 返回 `LatLng desLatLng = converter.convert();`\n\n## 注意事项\n\n- 国内非 BD09LL 坐标需先转为 BD09LL 再叠加到百度地图，否则会偏移。\n- 海外 POI 使用 WGS84，地图海外也为 WGS84，无需转换。同时使用国内外数据时，自动坐标转换方式不适用，需手动按场景转换。\n\nFile v1.0.3:references/errorcode.md\n\n# 错误码对照表\n\n检索、路线等接口返回结果中带 error/errorCode 时，可参考下表。更多可查官方错误码文档。\n\n| 状态码 | 含义 |\n|--------|------|\n| 0 | 正常 |\n| 1 | 服务器内部错误（超时或系统错误） |\n| 10 | 上传内容超过 8M |\n| 101 | AK 参数不存在 |\n| 102 | mcode 参数不存在（Mobile 类型必需 Mcode） |\n| 200 | APP 不存在，AK 有误 |\n| 201 | APP 被用户禁用 |\n| 202 | APP 被管理员删除 |\n| 203 | APP 类型错误（Server/Mobile/Browser 等） |\n| 210 | APP IP 校验失败 |\n| 211 | APP SN 校验失败 |\n| 220 | APP Referer 校验失败 |\n| 230 | APP Mcode 校验失败 |\n| 240 | APP 服务被禁用 |\n| 250 | 用户不存在 |\n| 251 | 用户被自己删除 |\n| 252 | 用户被管理员删除 |\n| 260 | 服务不存在 |\n| 261 | 服务被禁用 |\n| 301 | 永久配额超限 |\n| 302 | 天配额超限 |\n| 401 | 并发量超过约定并发配额 |\n| 402 | 并发超限且总并发也超总配额 |\n\n检索/路线结果判断：结果类（如 PoiResult、DrivingRouteResult）有 **result.error** 字段，类型为 **SearchResult.ERRORNO**（枚举）。成功：`result.error == SearchResult.ERRORNO.NO_ERROR`。\n\n### 路线规划常用 ERRORNO\n\n| 枚举值 | 含义 |\n|--------|------|\n| NO_ERROR | 成功 |\n| RESULT_NOT_FOUND | 未找到路线 |\n| AMBIGUOUS_ROURE_ADDR | 起终点或途经点地址歧义，可 result.getSuggestAddrInfo() |\n\n### POI 检索常用 ERRORNO\n\n| 枚举值 | 含义 |\n|--------|------|\n| NO_ERROR | 成功 |\n| RESULT_NOT_FOUND | 未找到 |\n| AMBIGUOUS_KEYWORD | 关键字在本市无、其他城市有，可 result.getSuggestCityList() |\n\nFile v1.0.3:references/gradle.md\n\n# Gradle 集成 SDK\n\nAndroid 推荐通过 Gradle 依赖集成百度地图 SDK（国内版）。Google 渠道等需使用一体化包时请从官网下载后按「本地依赖」方式集成。\n\n**版本**：以下以 7.6.x / 9.6.x 为例，实际以官网更新为准。不写版本号可改为 `+` 或具体版本号；API 以工程内依赖版本为准，类/方法不存在时提示更新依赖，见 [SKILL.md](../SKILL.md) 规则 6。\n\n## 1. 配置仓库\n\n在 **Project** 的 `build.gradle` 中配置 `repositories`，添加 mavenCentral：\n\n```gradle\nallprojects {\n    repositories {\n        mavenCentral()\n    }\n}\n```\n\n若项目已使用 `dependencyResolutionManagement`（Gradle 7+），在 `settings.gradle` 或对应块中为百度 SDK 提供 mavenCentral 即可。\n\n## 2. 主工程依赖（app/build.gradle）\n\n在 **app** 的 `build.gradle` 的 `dependencies` 中按需添加。常用组合示例：\n\n| SDK | 依赖 |\n|-----|------|\n| 地图组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Map:7.6.7'` |\n| 检索组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Search:7.6.7'` |\n| 工具组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Util:7.6.7'` |\n| 步骑行导航组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-BWNavi:7.6.7'` |\n| 基础定位组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Location:9.6.6'` |\n| 全量定位组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Location_All:9.6.6'` |\n| 驾车导航组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-Navi:7.6.7'` |\n| 驾车+步骑行导航 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-AllNavi:7.6.7'` |\n| TTS 组件 | `implementation 'com.baidu.lbsyun:NaviTts:3.2.13'` |\n| 全景组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Panorama:2.9.0'` |\n\n**仅地图+检索+工具**示例：\n\n```gradle\ndependencies {\n    implementation 'com.baidu.lbsyun:BaiduMapSDK_Map:7.6.7'\n    implementation 'com.baidu.lbsyun:BaiduMapSDK_Search:7.6.7'\n    implementation 'com.baidu.lbsyun:BaiduMapSDK_Util:7.6.7'\n}\n```\n\n## 3. 组件冲突说明\n\n以下各组内**只能选其一**，不能同时引入：\n\n| 组 | 可选依赖 |\n|----|----------|\n| 定位 | 基础定位 `BaiduMapSDK_Location` **或** 全量定位 `BaiduMapSDK_Location_All` |\n| 地图/导航 | 地图 `BaiduMapSDK_Map`、步骑行 `BaiduMapSDK_Map-BWNavi`、驾车导航 `BaiduMapSDK_Map-Navi`、全部导航 `BaiduMapSDK_Map-AllNavi` 中选一（后三者已含地图） |\n\n按需求选：仅展示地图+检索用 Map+Search+Util；要步骑行实时导航用 Map-BWNavi；要驾车导航用 Map-Navi 或 Map-AllNavi。\n\n## 4. NDK 架构（abiFilters）\n\n在 app 的 `build.gradle` 的 `android.defaultConfig` 中配置 so 架构，按需保留：\n\n```gradle\nandroid {\n    defaultConfig {\n        ndk {\n            abiFilters \"armeabi-v7a\", \"arm64-v8a\", \"x86\", \"x86_64\"\n        }\n    }\n}\n```\n\n说明：官方文档曾包含 \"armeabi\"，目前新包多已不再提供，以实际 SDK 为准。\n\n## 5. 注意事项\n\n- **Gradle 仅支持国内版**：若需 Google 渠道或其它定制包，请到官网下载一体化包，采用「下载 SDK 本地依赖」方式（jar + so 放入 libs/jniLibs，并在 build.gradle 中配置 sourceSets 与 implementation fileTree）。\n- 集成完成后需配置 **AndroidManifest**（AK、权限、定位 Service）与 **混淆规则**，见 [project-config.md](project-config.md)；Application 初始化与隐私见 [overview.md](overview.md)。\n\n## 6. 环境与镜像（集成经验）\n\n以下为实际构建时的常见问题与处理，便于 Sync / 运行一次通过。\n\n| 问题 | 处理 |\n|------|------|\n| **Java 21 与 Gradle 8.2 不兼容** | 升级到 Gradle 8.7（或 8.5+），并同步升级 Android Gradle Plugin（如 8.5.2）。在 `gradle-wrapper.properties` 中设置 `distributionUrl=.../gradle-8.7-bin.zip`。 |\n| **Downloading gradle-8.7-bin.zip timeout** | 国内网络可将 `distributionUrl` 改为腾讯云镜像：`https://mirrors.cloud.tencent.com/gradle/gradle-8.7-bin.zip`；并把 `networkTimeout=10000` 改为 `60000`。 |\n| **NoClassDefFoundError: org/gradle/wrapper/IDownload** | 工程里的 `gradle-wrapper.jar` 与 Gradle 版本不一致（如仍为 8.2 的 jar 却用 8.7 的 distribution）。需替换为与 8.7 对应的 [官方 gradle-wrapper.jar](https://raw.githubusercontent.com/gradle/gradle/v8.7.0/gradle/wrapper/gradle-wrapper.jar)，校验 SHA-256 见 [Gradle release-checksums](https://gradle.org/release-checksums/)。 |\n| **无法定位 Java Runtime** | 终端/IDE 需能找到 JDK。macOS 下可把 Android Studio 自带 JDK 写入 `~/.zshrc`：`export JAVA_HOME=\"/Applications/Android Studio.app/Contents/jbr/Contents/Home\"` 与 `export PATH=\"$JAVA_HOME/bin:$PATH\"`。 |\n\nFile v1.0.3:references/location.md\n\n# 显示定位\n\n## 坐标系说明\n\n- 定位 SDK 支持国内输出：国测局坐标、百度墨卡托、百度经纬度；海外仅 WGS84。定位 SDK 默认输出 GCJ02，地图 SDK 默认 BD09LL；混用时需统一，见 [coordinate.md](coordinate.md)。\n\n## 前置条件\n\n- 开发包需包含定位能力（下载 SDK 时勾选基本定位）。\n- AndroidManifest：声明定位相关权限；在 `<application>` 内声明定位 Service 组件。\n\n## 开启定位图层与传数据\n\n1. 开启：`mBaiduMap.setMyLocationEnabled(true)`。\n2. 继承 `BDAbstractLocationListener`，在 `onReceiveLocation(BDLocation location)` 中构造 `MyLocationData` 并传给地图：\n   - `MyLocationData.Builder().accuracy(radius).direction(direction).latitude(lat).longitude(lng).build()`\n   - `mBaiduMap.setMyLocationData(locData)`。\n3. 使用 `LocationClient`：`LocationClient option = new LocationClient(context)`，`LocationClientOption` 设置 `setOpenGps`、`setCoorType(\"bd09ll\")`、`setScanSpan` 等，`setLocOption(option)`，`registerLocationListener(myLocationListener)`，`start()`。\n4. 生命周期：在 `onDestroy` 中 `mLocationClient.stop()`、`mBaiduMap.setMyLocationEnabled(false)`，再执行 MapView 的 `onDestroy()`。\n\n## MyLocationConfiguration（自定义样式）\n\n构造：`MyLocationConfiguration(LocationMode mode, boolean enableDirection, BitmapDescriptor customMarker, int accuracyCircleFillColor, int accuracyCircleStrokeColor)`。\n\n- **定位模式**：`LocationMode.NORMAL`（普通）、`LocationMode.FOLLOWING`（跟随）、`LocationMode.COMPASS`（罗盘）。\n- **自定义定位图标**：`BitmapDescriptorFactory.fromResource(R.drawable.xxx)` 传入。\n- **精度圈**：填充色、边框色用 ARGB；精度圈大小由定位精度自动决定，不可手动设。\n- 设置：`mBaiduMap.setMyLocationConfiguration(config)`。\n\n## 自定义定位图标（v7.5.7+）\n\n- Builder 构造：`MyLocationConfiguration.Builder(LocationMode locationMode, boolean enableArrow)`，enableArrow 为 true 表示箭头模式，false 为整体模式。\n- 方法：`setCustomMarker(BitmapDescriptor)`、`setMarkerSize(float)`（0.2~3 倍）、`setArrow(BitmapDescriptor)`、`setArrowSize(float)`、`setAnimation(boolean)`（中心图呼吸动画，非箭头模式 false）、`setGifMarker(String gifPath)`（中心 gif）。设置后通过 `setMyLocationConfiguration` 生效。\n\n## 注意\n\n- 定位频次在 LocationClientOption 中设置；详见定位 SDK 文档。\n- 定位指针方向依赖陀螺仪，需自行处理，不在地图 SDK 范畴。\n\nFile v1.0.3:references/mapview.md\n\n# 地图容器与 BaiduMap\n\n## 配置与初始化\n\n- **AndroidManifest**：在 `<application>` 内配置 AK：`<meta-data android:name=\"com.baidu.lbsapi.API_KEY\" android:value=\"您的AK\"/>`。在 `<application>` 外声明权限（如网络、定位等）；自 Android 6.0 起部分权限需代码动态申请。\n- **初始化**：在自定义 Application 的 `onCreate` 中调用 `SDKInitializer.initialize(this)` 和 `SDKInitializer.setCoordType(CoordType.BD09LL)`（或 GCJ02）。隐私接口必须在 initialize 之前调用，见 [overview.md](overview.md)。\n\n## 布局与获取 BaiduMap\n\n- 布局中声明：`<com.baidu.mapapi.map.MapView android:id=\"@+id/bmapView\" ... />`。\n- 代码获取：`MapView mMapView = findViewById(R.id.bmapView);`，`BaiduMap mBaiduMap = mMapView.getMap();`。\n- 纯代码：`MapView mapView = new MapView(this);` 然后 `setContentView(mapView)`。也可用 `BaiduMapOptions` 构造带初始状态的 MapView：`new MapView(this, options)`。\n\n## MapView 生命周期（必须）\n\n在 Activity 中：\n- `onResume()` 内调用 `mMapView.onResume()`\n- `onPause()` 内调用 `mMapView.onPause()`\n- `onDestroy()` 内调用 `mMapView.onDestroy()`\n\n## BaiduMapOptions 可选状态\n\n| 状态 | 含义 |\n|------|------|\n| mapStatus | 地图状态 |\n| compassEnable | 是否开启指南针，默认开启 |\n| mapType | 地图模式，默认普通地图 |\n| rotateGesturesEnabled | 是否允许旋转手势 |\n| scrollGesturesEnabled | 是否允许拖拽 |\n| overlookingGesturesEnabled | 是否允许俯视手势 |\n| zoomControlsEnabled | 是否显示缩放按钮 |\n| zoomControlsPosition | 缩放控件位置 |\n| zoomGesturesEnabled | 是否允许缩放手势 |\n| scaleControlEnabled | 是否显示比例尺 |\n| scaleControlPosition | 比例尺位置 |\n| logoPosition | Logo 位置 |\n\n## 地图类型与图层\n\n- **地图类型**（`mBaiduMap.setMapType(...)`）：\n  - `BaiduMap.MAP_TYPE_NORMAL`：普通地图（含 3D）\n  - `BaiduMap.MAP_TYPE_SATELLITE`：卫星图\n  - `BaiduMap.MAP_TYPE_NONE`：空白地图（不下载瓦片，可叠瓦片或覆盖物）\n- **实时路况**：`mBaiduMap.setTrafficEnabled(true)`。V4.5.0+ 可自定义路况颜色：`setCustomTrafficColor(严重拥堵, 拥堵, 缓行, 畅通)`，颜色格式 `#AARRGGBB`，不需显示的可将 AA 设为 00。\n- **百度城市热力图**：`mBaiduMap.setBaiduHeatMapEnabled(true)`；仅 11–20 级可显示。\n\n## 显示层级与比例尺\n\n- 缩放等级：2D 地图 4–21，3D 地图 19–21，卫星 4–20，路况/热力 11–21，室内 17–22。自 v5.0.0 起由 3–21 改为 4–21。\n- 设置缩放：`MapStatus.Builder builder = new MapStatus.Builder(); builder.zoom(18.0f); mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));`\n\n## 常用地图容器\n\n- **GLSurfaceView 系**：MapView、MapFragment、SupportMapFragment。\n- **TextureView 系**：TextureMapView、TextureMapFragment、TextureSupportMapFragment。与其它 GLSurfaceView（如相机）叠加或放在 ScrollView 时建议用 Texture 系，避免穿透、黑屏。需 Android 4.4+ 且开启硬件加速。\n- SupportMapFragment 使用：`SupportMapFragment.newInstance(mapOptions)`，再通过 FragmentTransaction 添加或替换到容器。\n\n## 多实例\n\n同一页面可放多个 MapView/SupportMapFragment，分别操作互不干扰。每个通过 `getBaiduMap()`/`getMapView()` 获取控制器与视图，分别设置 `MapStatusUpdate`、`setLogoPosition` 等。\n\n## 方法交互（BaiduMap）\n\n- **缩放**：`MapStatusUpdateFactory.zoomTo(level)`、`zoomIn()`、`zoomOut()`、`zoomBy(delta)`；`setMapStatus()` 为跳变，`animateMapStatus()` 为动画。级别超出范围时按最大/最小级别显示。\n- **操作区内边距**：`mBaiduMap.setViewPadding(left, top, right, bottom)`；地图加载完成后生效，可通过 `OnMapLoadedCallback.onMapLoaded()` 监听。不得遮挡百度 Logo 与版权。布局模式、面板高度、与 fitBounds 区分见 [ui-standards.md](ui-standards.md)。\n- **显示范围**：`MapStatusUpdateFactory.newLatLngBounds(bounds)` 或 `newLatLngBounds(bounds, width, height)`，bounds 由 `LatLngBounds.Builder().include(...).include(...).build()` 构造。\n- **中心点**：`MapStatusUpdateFactory.newLatLng(latLng)`。\n- **底图 POI**：`mBaiduMap.showMapPoi(false)` 可隐藏底图标注仅留道路。POI 标签按类型控制：`setPoiTagEnable(PoiTagType, boolean)`、`getPoiTagEnable(PoiTagType)`；PoiTagType 含 All、Epidemic、Travel、Shop 等。\n- **空白地图背景色**：仅当 `setMapType(MAP_TYPE_NONE)` 时生效，`mBaiduMap.setMapBackgroundColor(Color.argb(...))`。\n\nFile v1.0.3:references/marker.md\n\n# 点标记（Marker）\n\n## 添加 Marker\n\n- `LatLng point = new LatLng(lat, lng);`\n- `BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.xxx);`\n- `OverlayOptions option = new MarkerOptions().position(point).icon(bitmap);`\n- `mBaiduMap.addOverlay(option);` 返回 Overlay，可强转为 Marker。\n\n## MarkerOptions 常用属性\n\n| 名称 | 说明 |\n|------|------|\n| icon | 图标 BitmapDescriptor |\n| animateType | 动画类型：MarkerAnimateType.none / drop / grow / jump |\n| alpha | 透明度 |\n| position | 位置 LatLng |\n| perspective | 是否近大远小，默认 true |\n| draggable | 是否可拖拽 |\n| flat | 是否平贴地图（俯视效果） |\n| anchor | 锚点比例 |\n| rotate | 旋转角度 |\n| title | 标题 |\n| visible | 是否可见 |\n| extraInfo | 额外信息 Bundle |\n\n示例：`.position(point).icon(bitmap).draggable(true).flat(true).alpha(0.5f)`。\n\n## 事件\n\n- **点击**：`mBaiduMap.setOnMarkerClickListener(BaiduMap.OnMarkerClickListener)`，`onMarkerClick(Marker marker)`，返回 true 表示消费事件。\n- **拖拽**：需在 MarkerOptions 中 `draggable(true)`；`setOnMarkerDragListener`，回调 `onMarkerDrag`、`onMarkerDragEnd`、`onMarkerDragStart`。\n\n## 底图标注\n\n- `mBaiduMap.showMapPoi(false)` 可隐藏底图 POI，仅显示道路。\n\n## Marker 碰撞策略（v7.5.0+）\n\n- 属性：`isJoinCollision`（是否参与碰撞）、`isForceDisplay`（参与后是否强制展示）、`priority`（碰撞优先级，默认整型最大）、`startLevel`/`endLevel`（最小/最大展示层级，室外默认 4–21，室内至 22）。\n- 使用：`MarkerOptions().position(...).icon(...).isJoinCollision(true).isForceDisplay(true).priority(9)`，再 `addOverlay` 即生效。\n\n## 3D Marker（v7.5.2+）\n\n- 带高度的 Marker：先设高度，用 `projection.geoPoint3toScreenLocation(LatLng, height)` 转成屏幕点，再用 `projection.fromScreenLocation(Point)` 转回经纬度，然后按普通 Marker 添加。\n\n## Marker 的 Title（v7.5.7+）\n\n- 通过 `TitleOptions`：titleBgColor、titleFrontColor、titleFrontSize、titleAnchorX/Y、titileOffsetX/Y、titleRotate。\n- `MarkerOptions.titleOptions(titleOptions)`。\n\n## Marker 碰撞 POI（v7.5.7+）\n\n- `MarkerOptions.poiCollided(true)` 使 Marker 及其 title 可与底图 POI 碰撞。\n\nFile v1.0.3:references/overlays.md\n\n# 折线与多边形覆盖物\n\n## 折线 PolylineOptions\n\n- 坐标列表：`List<LatLng> points`。\n- 常用属性：`color`、`width`、`points`、`colorsValues`（分段颜色）、`customTexture` / `customTextureList` + `textureIndex`（分段纹理）、`visible`、`extraInfo`。\n- 添加：`OverlayOptions o = new PolylineOptions().width(10).color(0xAAFF0000).points(points);`，`mBaiduMap.addOverlay(o);` 返回可强转为 Polyline。\n\n## 虚线\n\n- 构造时：`PolylineOptions().dottedLine(true)`；或对已添加的 Polyline：`((Polyline)mPolyline).setDottedLine(true)`。\n\n## 分段颜色\n\n- `PolylineOptions().points(points).colorsValues(List<Integer> colors)`，colors 与线段段数对应。\n\n## 分段纹理\n\n- 纹理宽高建议 2 的幂；设纹理后折线颜色不生效。`customTextureList(List<BitmapDescriptor>)`、`textureIndex(List<Integer>)`；建议配合 `dottedLine(true)`。\n\n## Polyline 点击\n\n- `mBaiduMap.setOnPolylineClickListener(BaiduMap.OnPolylineClickListener)`，`onPolylineClick(Polyline polyline)` 返回 boolean。\n\n## 大地曲线\n\n- `PolylineOptions().isGeodesic(true).points(pointList)`；经度跨 180° 时需设置 `lineDirectionCross180(PolylineOptions.LineDirectionCross180.FROM_WEST_TO_EAST)`。点数 2–10000，且不能含 null。\n\n## 渐变色\n\n- `PolylineOptions().isGradient(true).points(points).colorsValues(List<Integer> colorValue)`，colorValue 为每个点的颜色，按索引与点对应。\n\n## Polyline 发光（v7.5.7+）\n\n- `PolylineOptions.bloomType(LineBloomType)`（默认不发光）、`bloomWidth(int)`、`bloomAlpha(int)`、`setBloomGradientASpeed(float)`、`setBloomBlurTimes(int)` 等。\n\n## 多边形\n\n- 使用 `PolygonOptions` 设置轮廓点、填充色、边框等，`mBaiduMap.addOverlay(polygonOptions)` 得到 Polygon。具体属性见类参考。\n\n## 路线 Overlay（开源）\n\n- 自 V3.6.0 起 Overlay 源码在 Demo 的 overlayutil 包：PoiOverlay、TransitRouteOverlay、WalkingRouteOverlay、BikingRouteOverlay、DrivingRouteOverlay、BusLineOverlay、MassTransitRouteOverlay 等，需自行拷贝到项目使用。\n\nFile v1.0.3:references/overview.md\n\n# 百度地图 Android SDK 集成与核心 API 摘要\n\nSDK 集成方式：推荐通过 **Gradle** 依赖（见 [gradle.md](gradle.md)）；AndroidManifest、混淆等见 [project-config.md](project-config.md)。\n\n## 使用准备与 AK\n\n1. 申请百度账号并完成开发者认证。\n2. 在控制台「应用管理 - 我的应用」创建应用，应用类型选 **Android SDK**，填写：\n   - 应用名称、**包名**（与 build.gradle 的 applicationId 一致）、**SHA1**（debug/release 可各填一个）。\n   - 勾选所需服务（地图、检索、路线等），未勾选则对应接口可能返回无权限。\n3. 将生成的 AK 配置到工程：AndroidManifest 的 `<application>` 内 `<meta-data android:name=\"com.baidu.lbsapi.API_KEY\" android:value=\"您的AK\"/>`，或代码中 `SDKInitializer.setApiKey(\"ak\")`（须在 `initialize` 之前）。包名与签名须与申请一致。鉴权结果由 SDK 通过广播回调（成功/失败/网络错误），失败时 Intent 带错误码与错误信息，排查与广播 Action 见 [project-config.md](project-config.md)。\n\n**SHA1**：调试版 `keytool -list -v -keystore ~/.android/debug.keystore`，默认口令 `android`。发布版用 release keystore。\n\n## 隐私合规（v7.5.0+）\n\n- 调用 SDK 任何接口前必须先调用隐私合规接口，且**必须在 `SDKInitializer.initialize` 之前**调用。\n- 定位 SDK：不同意则无法正常获取位置；地图 SDK：不同意则检索、路线等请求异常。\n- 统一接口：`SDKInitializer.setAgreePrivacy(Context context, boolean isEnable)`，context 必须为 Application Context；`isEnable` 为 true 表示用户同意隐私政策。\n- 推荐写法：在 Application 中先 `setAgreePrivacy`，再在 try-catch 中 `initialize`（可捕获 BaiduMapSDKException）。可按用户是否同意隐私分别设置；未同意时 `setAgreePrivacy(context, false)`，同意后再设为 true 并初始化。\n\n```java\n// 用户同意后，必须在 initialize 之前调用\nSDKInitializer.setAgreePrivacy(getApplicationContext(), true);\ntry {\n    SDKInitializer.initialize(this);\n} catch (BaiduMapSDKException e) {\n    // 初始化失败可记录日志\n}\nSDKInitializer.setCoordType(CoordType.BD09LL);\n```\n\n## Application 初始化\n\n```java\npublic class DemoApplication extends Application {\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SDKInitializer.setAgreePrivacy(getApplicationContext(), true); // 必须先于 initialize\n        try {\n            SDKInitializer.initialize(this);\n        } catch (BaiduMapSDKException e) { }\n        SDKInitializer.setCoordType(CoordType.BD09LL); // 或 CoordType.GCJ02，自 4.3.0\n    }\n}\n```\n\n## MapView 与 BaiduMap 生命周期\n\n- 布局中声明 `MapView`（或代码 `new MapView(this)`），Activity 中 `mMapView.getMap()` 得到 `BaiduMap`。\n- **必须在 Activity 中调用**：`onResume()` → `mMapView.onResume()`；`onPause()` → `mMapView.onPause()`；`onDestroy()` → `mMapView.onDestroy()`。\n\n## 核心类速查\n\n| 用途 | 类/接口 |\n|------|---------|\n| 初始化、坐标类型 | SDKInitializer、CoordType |\n| 地图控件与控制器 | MapView、BaiduMap、SupportMapFragment、TextureMapView |\n| 地图状态 | MapStatus、MapStatusUpdate、MapStatusUpdateFactory、MapStatus.Builder |\n| 经纬度 | LatLng |\n| 点标记 | Marker、MarkerOptions、BitmapDescriptor、BitmapDescriptorFactory |\n| 折线/多边形 | Polyline、PolylineOptions、Polygon、PolygonOptions |\n| POI 检索 | PoiSearch、PoiCitySearchOption、PoiNearbySearchOption、PoiBoundSearchOption、PoiDetailSearchOption、OnGetPoiSearchResultListener、PoiResult、PoiDetailSearchResult |\n| 地理编码 | GeoCoder、GeoCodeOption、ReverseGeoCodeOption、OnGetGeoCoderResultListener、GeoCodeResult、ReverseGeoCodeResult |\n| 路线规划 | RoutePlanSearch、DrivingRoutePlanOption、PlanNode、OnGetRoutePlanResultListener、DrivingRouteResult；步行/骑行/公交对应 Option/Result |\n| 路线 Overlay（开源） | DrivingRouteOverlay、WalkingRouteOverlay、BikingRouteOverlay、TransitRouteOverlay、PoiOverlay |\n| 步行/骑行导航 | WalkNavigateHelper、BikeNavigateHelper、WalkNaviLaunchParam、BikeNaviLaunchParam、诱导与 TTS 监听 |\n| 定位 | LocationClient、LocationClientOption、BDAbstractLocationListener、MyLocationData、MyLocationConfiguration、LocationMode |\n| 室内图 | BaiduMap.setOnBaseIndoorMapListener、switchBaseIndoorMapFloor |\n| 坐标转换 | CoordinateConverter、CoordType.GPS/COMMON/BD09MC 等 |\n\n## 检索与路线注意点\n\n- **监听先于请求**：POI 先 `setOnGetPoiSearchResultListener` 再 `searchInCity`/`searchNearby`/`searchInBound`/`searchPoiDetail`；路线先 `setOnGetRoutePlanResultListener` 再 `drivingSearch`/`walkingSearch` 等。\n- 使用完毕后 `destroy()` 释放 PoiSearch、RoutePlanSearch、GeoCoder 等实例。\n\n## 系统与包说明\n\n- 支持 Android 4.0+；支持 armeabi-v7a、arm64-v8a、x86、x86_64。\n- 自 V3.6.0 起覆盖物相关类开源（OverlayManager、PoiOverlay、TransitRouteOverlay、WalkingRouteOverlay、DrivingRouteOverlay、BusLineOverlay 等），可从 Demo 的 overlayutil 包获取。\n- 自 v4.5.0 支持 HTTPS，V5.3.2 起默认 HTTPS；Android P+ 禁止明文，检索建议用 HTTPS 或配置 network_security_config。\n\nFile v1.0.3:references/project-config.md\n\n# 工程配置\n\n**边界**：AndroidManifest、Gradle 混淆、百度 SDK 相关工程配置；Gradle 依赖见 [gradle.md](gradle.md)。\n\n## AndroidManifest\n\n### 配置 AK\n\n在 `<application>` 内添加 meta-data：\n\n```xml\n<meta-data\n    android:name=\"com.baidu.lbsapi.API_KEY\"\n    android:value=\"您的AK\" />\n```\n\n也可在代码中通过 `SDKInitializer.setApiKey(\"您的AK\")` 设置（**必须在 `initialize` 之前**调用，且优先于 Manifest 中的 meta-data）。\n\n**控制台配置**：在百度开放平台「应用管理 - 我的应用」创建应用，应用类型选 **Android SDK**；包名填写与 `build.gradle` 中 **applicationId** 完全一致；SHA1 填写调试/发布签名对应值（调试：`keytool -list -v -keystore ~/.android/debug.keystore`，默认口令 `android`）。勾选所需服务（地图、检索、路线规划等），未勾选则对应能力鉴权不通过。\n\n### AK 鉴权结果与排查\n\n- **鉴权方式**：SDK 在 `initialize` 后异步向服务端校验 AK，结果通过**广播**通知。\n- **广播 Action**（常量在 `SDKInitializer` 中）：\n  - `SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK`：AK 验证成功。\n  - `SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR`：AK 验证失败；Intent 附加 `SDK_BROADTCAST_INTENT_EXTRA_INFO_KEY_ERROR_CODE`（int）、`SDK_BROADTCAST_INTENT_EXTRA_INFO_KEY_ERROR_MESSAGE`（String）。\n  - `SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR`：网络错误，鉴权可能未完成。\n- **监听方式**：在 Activity 或 Application 中注册 `BroadcastReceiver`，过滤上述 Action；在 `onResume` 注册、`onPause` 注销，避免泄漏。收到 OK 可提示“鉴权成功”，收到 ERROR 可提示错误码与错误信息便于排查。\n- **常见失败原因**：包名与控制台不一致（必须与 applicationId 一致）；SHA1 与当前签名不一致（换 keystore 或打包方式后需更新控制台 SHA1）；控制台未勾选对应服务（如路线规划）；网络不可用。错误码含义见 [errorcode.md](errorcode.md)（如 101 AK 不存在、200 APP 不存在/AK 有误、240 服务被禁用）。\n\n### 权限\n\n在 manifest 中声明所需权限，例如：\n\n```xml\n<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n<uses-permission android:name=\"android.permission.INTERNET\" />\n<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />\n<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />\n```\n\n自 Android 6.0 起，危险权限需在运行时申请。\n\n### 主题与 Activity（避免闪退）\n\n使用 **AppCompatActivity** 时，`<application>` 的 `android:theme` 必须为 **Theme.AppCompat** 或其子类（如 `Theme.AppCompat.Light.NoActionBar`）。若使用系统主题 `@android:style/Theme.Material.Light.NoActionBar`，会在 `setContentView` 时抛出：\n\n`IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.`\n\n推荐在 AndroidManifest 中设置：\n\n```xml\nandroid:theme=\"@style/Theme.AppCompat.Light.NoActionBar\"\n```\n\n（由 `androidx.appcompat` 提供，无需在 styles.xml 中再定义。）\n\n### 定位 Service（使用定位时）\n\n使用地图定位或定位 SDK 时，在 `<application>` 内声明定位服务组件（具体组件名以当前 SDK 文档为准，例如）：\n\n```xml\n<service\n    android:name=\"com.baidu.location.f\"\n    android:enabled=\"true\"\n    android:process=\":remote\" />\n```\n\n请以官方「显示定位」或「Android Studio 配置」文档中的声明为准。\n\n## 混淆（ProGuard）\n\n发布包混淆时，百度地图相关类不得被混淆，否则易出现网络不可用等运行时异常。\n\n1. 在 app 的 `build.gradle` 的 `buildTypes.release`（若 debug 也混淆则一并配置）中启用混淆规则文件：\n\n```gradle\nbuildTypes {\n    release {\n        minifyEnabled true\n        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n    }\n}\n```\n\n2. 在 `proguard-rules.pro` 中添加：\n\n```\n-keep class com.baidu.** { *; }\n-keep class vi.com.** { *; }\n-keep class com.baidu.vi.** { *; }\n-dontwarn com.baidu.**\n```\n\n## 资源说明（V5.1.0+）\n\n自 V5.1.0 起，部分原 jar 内图片资源移至官方示例工程的 assets，若使用到路线/公交等 Overlay 图标，可从官网下载对应 Android 示例工程，将 `app/src/main/assets/` 下相关资源拷贝到本工程 assets。常见文件名包括：Icon_end.png、Icon_start.png、Icon_line_node.png、Icon_bus_station.png、Icon_subway_station.png、Icon_walk_route.png 等。步骑行导航一体化包解压后若带 assets 目录，也需拷贝到项目 assets。\n\n## 集成经验与常见问题\n\n以下为实际集成地图展示时的常见坑与建议，便于一次跑通。\n\n**排查顺序**（Agent 建议遵守）：先确认 **主题**（AppCompat）与 **compileSdk**（如 34）；再确认 **Application** 中隐私与 `initialize` 顺序、**AK/包名/SHA1** 与控制台一致；仍有闪退或地图不显示时查 **Logcat**（MapApplication、MainActivity、AndroidRuntime）及 **MapView 生命周期**（onResume/onPause/onDestroy 是否调用）。\n\n| 问题 | 原因 / 建议 |\n|------|--------------|\n| **闪退：You need to use a Theme.AppCompat theme** | 见上文「主题与 Activity」：必须使用 `@style/Theme.AppCompat.Light.NoActionBar` 等 AppCompat 主题，勿用 `@android:style/Theme.Material.*`。 |\n| **AAR 要求 compileSdk 34** | 依赖（如 `androidx.activity:activity:1.8.0`）可能要求 compileSdk ≥ 34。在 app 的 `build.gradle` 中设置 `compileSdk = 34`；targetSdk 可单独保留为 33。 |\n| **MapView 在部分设备/模拟器上闪退** | 若在 `onCreate` 中立即 `getMap()` 导致崩溃，可将 `getMap()` 延后到 **onResume()** 中首次调用，并做 null 判断与 try-catch，便于排查。 |\n| **Application 初始化失败** | Application 中建议用 `catch (Throwable)` 并打 Log（如 `Log.e(TAG, \"Baidu SDK init failed\", e)`），便于通过 Logcat 确认是否为 SDK 初始化或 AK/包名问题。 |\n| **鉴权失败、地图不显示、路线/检索无结果** | 先确认控制台包名=applicationId、SHA1 与当前签名一致、已勾选对应服务；监听鉴权广播（PERMISSION_CHECK_ERROR）获取错误码与错误信息，对照 [errorcode.md](errorcode.md)。 |\n\n## 后续\n\nApplication 内初始化与隐私接口见 [overview.md](overview.md)；显示地图与 MapView 生命周期见 [mapview.md](mapview.md)。Gradle 版本与国内镜像见 [gradle.md](gradle.md)。\n\nArchive v1.0.2: 18 files, 36289 bytes\n\nFiles: _meta.json (140b), references/class-reference.md (4934b), references/coordinate.md (1733b), references/errorcode.md (1660b), references/gradle.md (4754b), references/location.md (2574b), references/mapview.md (4649b), references/marker.md (2319b), references/overlays.md (2110b), references/overview.md (5331b), references/project-config.md (6608b), references/reference.md (5559b), references/route.md (4475b), references/search.md (3735b), references/tools.md (3596b), references/ui-standards.md (7893b), skill-card.md (2770b), SKILL.md (5526b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: baidu-map-android-sdk\ndescription: 百度地图 Android SDK 集成与开发规范。覆盖地图展示、MapView/BaiduMap 生命周期、定位、标注与覆盖物、POI 检索、路线规划、步骑行导航；输出符合隐私与 AK 配置的 Android 地图方案。在开发 Android 地图应用、集成百度地图 SDK、MapView、路线规划、POI、导航时使用。\ncompatibility: Android, Gradle, Android Studio\n---\n\n# 百度地图 Android SDK\n\n## 目标与边界\n\n- **目标**：在 Android 工程中正确集成百度地图 SDK，并给出符合隐私、AK、坐标系规范的实现方案。\n- **负责**：地图展示、MapView 生命周期、覆盖物、POI/路线/地理编码检索、步骑行导航等；以技能内 references 为准。\n- **不负责**：服务端逻辑、非百度 SDK、UI 视觉设计。\n\n## 使用时机\n\n满足其一即启用本技能：\n\n- 关键词：百度地图 Android、MapView、BaiduMap、AK、路线规划、POI 检索、步骑行导航、BD09、坐标类型\n- 需求类型：地图展示、定位、标注与覆盖物、POI/地点检索、路线规划与画线、步行/骑行实时导航、地理编码\n\n**按需加载**：先根据需求在 [reference.md](references/reference.md) 中选定文档，再引用对应 references 内容；需求含糊时先向用户澄清**再给方案**。\n\n## 必须遵守的规则\n\n1. **隐私与初始化（v7.5.0+）**\n   - 调用 SDK 任何接口前必须先调用隐私合规接口，且**必须在 `SDKInitializer.initialize` 之前**调用。见 [overview.md](references/overview.md) 隐私合规小节。\n   - Application 中：`SDKInitializer.initialize(this)`；自 4.3.0 起可用 `SDKInitializer.setCoordType(CoordType.BD09LL)` 或 `CoordType.GCJ02`。\n\n2. **AK 与配置**\n   - 使用前需在控制台申请 Android SDK 密钥（AK），应用类型选「Android SDK」，填写包名、SHA1。AK 配置到 AndroidManifest 或 `SDKInitializer.setApiKey`；包名与签名须与申请一致。见 [overview.md](references/overview.md)。\n\n3. **MapView 生命周期**\n   - Activity 的 `onResume`/`onPause`/`onDestroy` 中必须分别调用 `mMapView.onResume()`、`mMapView.onPause()`、`mMapView.onDestroy()`。见 [mapview.md](references/mapview.md)。\n\n4. **坐标系**\n   - 国内默认 BD09LL；可与 GCJ02 通过 `SDKInitializer.setCoordType` 统一。与定位混用时与定位 SDK 坐标类型一致；转换见 [coordinate.md](references/coordinate.md)。\n\n5. **检索与路线**\n   - **监听先于请求**：先 `setOnGetPoiSearchResultListener` 再 `searchNearby` 等；先 `setOnGetRoutePlanResultListener` 再 `drivingSearch` 等，否则可能拿不到回调。用完后 `destroy()` 释放实例。\n\n6. **版本与 API 以工程为准**\n   - 用户已集成 SDK 时，以其实机/工程内版本为准。若某类或方法**不存在**（编译报错或依赖中无此符号），**提示用户将对应依赖更新到兼容版本**后再重试，勿强行写不存在的 API。\n\n7. **步骑行：按需求区分**\n   - **路线规划（算路+画线）**：RoutePlanSearch（驾车/步行/骑行/公交），得到路线后自绘折线或使用开源 Overlay。见 [route.md](references/route.md)。\n   - **步骑行实时导航**：步行/骑行导航引擎、诱导、TTS、偏航纠偏等，类见 [overview.md](references/overview.md) 与 [class-reference.md](references/class-reference.md)。\n   - 二者是**不同服务**：仅需画线用 route；需实时诱导/TTS 用步骑行导航。给出方案前先按开发者需求选对文档。\n\n## 输出规范（可评估）\n\n- **可落地**：含具体类名、方法、调用顺序与必要配置（AndroidManifest、Application、AK、隐私）。\n- **可验证**：隐私与 AK 明确；检索/路线监听顺序正确；若涉及定位/鉴权失败，方案可指向 [location.md](references/location.md) 或 [project-config.md](references/project-config.md) 的排查项。\n- **可组合**：按 [reference.md](references/reference.md) 选文档与常见组合。无特殊要求时界面与交互遵循 [ui-standards.md](references/ui-standards.md)。\n\n方案结构：需求 → 对应文档 → 配置与依赖 → 关键 API → 示例片段 → 注意事项。\n\n## 参考索引\n\n- 按需求选文档与常见组合：[reference.md](references/reference.md)\n- Gradle 集成（依赖、冲突、NDK、环境与国内镜像）：[gradle.md](references/gradle.md)\n- AndroidManifest、主题、混淆、集成经验与常见问题：[project-config.md](references/project-config.md)\n- 集成、AK、隐私、生命周期、核心类：[overview.md](references/overview.md)\n- 地图容器、类型、层级、方法交互：[mapview.md](references/mapview.md)\n- 显示定位、定位模式、自定义图标：[location.md](references/location.md)\n- 点标记、Marker 属性与事件：[marker.md](references/marker.md)\n- 折线、多边形、Polyline 属性：[overlays.md](references/overlays.md)\n- POI、地理编码、逆地理：[search.md](references/search.md)\n- 路线规划与 Overlay：[route.md](references/route.md)\n- 坐标转换与坐标系：[coordinate.md](references/coordinate.md)\n- 距离/面积、点与图形关系、调起地图、短地址分享：[tools.md](references/tools.md)\n- 错误码：[errorcode.md](references/errorcode.md)\n- 类与包速查：[class-reference.md](references/class-reference.md)\n- 检索/路线/选点/弹窗/Logo 等 UI 与交互约定：[ui-standards.md](references/ui-standards.md)\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn778b6bf766ym71fdvrc5yvg98319rv\",\n  \"slug\": \"baidu-map-android-sdk\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1775534906806\n}\n\nFile v1.0.2:references/class-reference.md\n\n# 类与包速查\n\n以下为百度地图 Android SDK 常用类与包，便于按能力查找。具体方法、参数以工程所集成的 SDK 版本为准。\n\n## 初始化与配置\n\n- `com.baidu.mapapi.SDKInitializer`：initialize、setApiKey、setCoordType、setAgreePrivacy、getCoordType\n- `com.baidu.mapapi.CoordType`：BD09LL、GCJ02\n\n## 地图容器与控制器\n\n- `com.baidu.mapapi.map.MapView`、`BaiduMap`、`getMap()`、onResume/onPause/onDestroy\n- `com.baidu.mapapi.map.SupportMapFragment`、`TextureMapView`、`TextureSupportMapFragment`\n- `com.baidu.mapapi.map.BaiduMapOptions`：mapType、compassEnable、zoomGesturesEnabled 等\n\n## 地图状态与视野\n\n- `MapStatus`、`MapStatus.Builder`、`MapStatusUpdate`、`MapStatusUpdateFactory`\n- `MapStatusUpdateFactory.zoomTo/zoomIn/zoomOut/zoomBy`、`newLatLng`、`newLatLngBounds`、`newMapStatus`\n- `BaiduMap`：setMapStatus、animateMapStatus、setMapType、setTrafficEnabled、setBaiduHeatMapEnabled、setViewPadding、showMapPoi、setPoiTagEnable、setMapBackgroundColor\n\n## 几何与覆盖物基础\n\n- `com.baidu.mapapi.model.LatLng`、`LatLngBounds`、`LatLngBounds.Builder`\n- `com.baidu.mapapi.map.BitmapDescriptor`、`BitmapDescriptorFactory`\n- `OverlayOptions`、`Overlay`、`BaiduMap.addOverlay`、`clear`\n- `Marker`、`MarkerOptions`：position、icon、draggable、flat、alpha、animateType、titleOptions、isJoinCollision、poiCollided 等\n- `Polyline`、`PolylineOptions`：points、width、color、dottedLine、colorsValues、customTextureList、textureIndex、isGeodesic、isGradient、bloomType 等\n- `Polygon`、`PolygonOptions`\n\n## 事件监听\n\n- `BaiduMap.OnMarkerClickListener`、`OnMarkerDragListener`、`OnPolylineClickListener`、`OnMapLoadedCallback`\n\n## 定位\n\n- `com.baidu.location.LocationClient`、`LocationClientOption`、`BDAbstractLocationListener`、`BDLocation`\n- `com.baidu.mapapi.map.MyLocationData`、`MyLocationConfiguration`、`LocationMode`（NORMAL、FOLLOWING、COMPASS）\n- `BaiduMap`：setMyLocationEnabled、setMyLocationData、setMyLocationConfiguration\n\n## 检索\n\n- `com.baidu.mapapi.search.poi.PoiSearch`、`PoiSearch.newInstance()`、setOnGetPoiSearchResultListener、searchInCity、searchNearby、searchInBound、searchPoiDetail、destroy\n- `PoiCitySearchOption`、`PoiNearbySearchOption`、`PoiBoundSearchOption`、`PoiDetailSearchOption`\n- `OnGetPoiSearchResultListener`、`PoiResult`、`PoiDetailSearchResult`、`PoiInfo`\n- `com.baidu.mapapi.search.geocode.GeoCoder`、`GeoCodeOption`、`ReverseGeoCodeOption`、`OnGetGeoCoderResultListener`、`GeoCodeResult`、`ReverseGeoCodeResult`\n\n## 路线规划\n\n- `com.baidu.mapapi.search.route.RoutePlanSearch`、`RoutePlanSearch.newInstance()`、setOnGetRoutePlanResultListener、drivingSearch、walkingSearch、ridingSearch、transitSearch、destroy\n- `PlanNode`、`PlanNode.withCityNameAndPlaceName`、`PlanNode.withLocation`\n- `DrivingRoutePlanOption`、`WalkingRoutePlanOption`、`BikingRoutePlanOption`、`TransitRoutePlanOption`\n- `OnGetRoutePlanResultListener`、`DrivingRouteResult`、`WalkingRouteResult`、`BikingRouteResult`、`TransitRouteResult`、`getRouteLines()`\n- 开源 Overlay：DrivingRouteOverlay、WalkingRouteOverlay、BikingRouteOverlay、TransitRouteOverlay、PoiOverlay（overlayutil 包）\n\n## 步骑行导航（实时诱导）\n\n- WalkNavigateHelper、BikeNavigateHelper、WalkNaviLaunchParam、BikeNaviLaunchParam、initNaviEngine、routePlanWithParams、onCreate（诱导 View）、startWalkNavi/startBikeNavi、setRouteGuidanceListener、setTTsPlayer、resume/pause/quit\n\n## 坐标转换\n\n- `com.baidu.mapapi.utils.CoordinateConverter`、`CoordType.GPS`、`COMMON`、`BD09MC` 等、`from()`、`coord()`、`convert()`\n\n## 室内图\n\n- `BaiduMap.setOnBaseIndoorMapListener`、`switchBaseIndoorMapFloor`、MapBaseIndoorMapInfo、SwitchFloorError\n\n## 投影与 3D Marker\n\n- `BaiduMap.getProjection()`、`projection.geoPoint3toScreenLocation(LatLng, height)`、`fromScreenLocation(Point)`\n\n## 工具（BaiduMapSDK_Util）\n\n- **距离与面积**：`DistanceUtil.getDistance(LatLng, LatLng)` 返回米；`AreaUtil.calculateArea(LatLng northeast, LatLng southwest)` 返回平方米。\n- **点与图形**：`SpatialRelationUtil.isCircleContainsPoint(center, radius, point)`、`isPolygonContainsPoint(points, pt)`、`getNearestPointFromLine(points, pt)`。\n- **调起百度地图**：`BaiduMapRoutePlan`（RouteParaOption、openBaiduMapTransitRoute 等）、`BaiduMapNavigation`（NaviParaOption、openBaiduMapWalkNavi 等）、`BaiduMapPoiSearch`（PoiParaOption、openBaiduMapPoiNearbySearch、openBaiduMapPoiDetialsPage、openBaiduMapPanoShow），调起后调用对应 `finish(context)`。\n- **短地址分享**：`ShareUrlSearch`、OnGetShareUrlResultListener、PoiDetailShareURLOption、LocationShareURLOption、RouteShareURLOption、requestPoiDetailShareUrl/requestLocationShareUrl/requestRouteShareUrl，ShareUrlResult.getUrl()，destroy()。\n\nFile v1.0.2:references/coordinate.md\n\n# 坐标转换与坐标系\n\n## 坐标系类型\n\n- **WGS84**：GPS 常用大地坐标系。\n- **GCJ02**：国测局坐标系，由 WGS84 加密。\n- **BD09**：百度坐标系，在 GCJ02 上再次加密。BD09LL 为百度经纬度，BD09MC 为百度墨卡托米制。\n- 国内（含港澳台）：地图 SDK 默认输入输出 BD09LL；可全局声明为 GCJ02，则全应用输入/输出为 GCJ02。海外统一 WGS84。\n- 定位 SDK 默认输出 GCJ02；与地图混用时需统一，通常地图设为 BD09LL 且定位设置 `setCoorType(\"bd09ll\")`，或地图设为 GCJ02。\n\n## 全局坐标类型（自 4.3.0）\n\n- `SDKInitializer.setCoordType(CoordType.BD09LL);` 或 `CoordType.GCJ02;` 声明全局类型。\n- `SDKInitializer.getCoordType();` 获取当前类型。\n- 自动转换仅适用于国内 GCJ02 输入；海外用 WGS84 无需转换。\n\n## 通用坐标转换（CoordinateConverter）\n\n- 将 WGS84/GCJ02 等转为 BD09LL（或当前声明的类型），需使用 SDK 提供的 CoordinateConverter，勿用非官方算法。\n- 示例（其它坐标系 → 百度经纬度）：\n  - 高德/腾讯等（COMMON）：`CoordinateConverter().from(CoordType.COMMON).coord(sourceLatLng).convert();`\n  - GPS 设备原始坐标：`CoordinateConverter().from(CoordinateConverter.CoordType.GPS).coord(sourceLatLng).convert();`\n- BD09MC → BD09LL：`from(CoordType.BD09MC).coord(sourceLatLng).convert();`\n- 返回 `LatLng desLatLng = converter.convert();`\n\n## 注意事项\n\n- 国内非 BD09LL 坐标需先转为 BD09LL 再叠加到百度地图，否则会偏移。\n- 海外 POI 使用 WGS84，地图海外也为 WGS84，无需转换。同时使用国内外数据时，自动坐标转换方式不适用，需手动按场景转换。\n\nFile v1.0.2:references/errorcode.md\n\n# 错误码对照表\n\n检索、路线等接口返回结果中带 error/errorCode 时，可参考下表。更多可查官方错误码文档。\n\n| 状态码 | 含义 |\n|--------|------|\n| 0 | 正常 |\n| 1 | 服务器内部错误（超时或系统错误） |\n| 10 | 上传内容超过 8M |\n| 101 | AK 参数不存在 |\n| 102 | mcode 参数不存在（Mobile 类型必需 Mcode） |\n| 200 | APP 不存在，AK 有误 |\n| 201 | APP 被用户禁用 |\n| 202 | APP 被管理员删除 |\n| 203 | APP 类型错误（Server/Mobile/Browser 等） |\n| 210 | APP IP 校验失败 |\n| 211 | APP SN 校验失败 |\n| 220 | APP Referer 校验失败 |\n| 230 | APP Mcode 校验失败 |\n| 240 | APP 服务被禁用 |\n| 250 | 用户不存在 |\n| 251 | 用户被自己删除 |\n| 252 | 用户被管理员删除 |\n| 260 | 服务不存在 |\n| 261 | 服务被禁用 |\n| 301 | 永久配额超限 |\n| 302 | 天配额超限 |\n| 401 | 并发量超过约定并发配额 |\n| 402 | 并发超限且总并发也超总配额 |\n\n检索/路线结果判断：结果类（如 PoiResult、DrivingRouteResult）有 **result.error** 字段，类型为 **SearchResult.ERRORNO**（枚举）。成功：`result.error == SearchResult.ERRORNO.NO_ERROR`。\n\n### 路线规划常用 ERRORNO\n\n| 枚举值 | 含义 |\n|--------|------|\n| NO_ERROR | 成功 |\n| RESULT_NOT_FOUND | 未找到路线 |\n| AMBIGUOUS_ROURE_ADDR | 起终点或途经点地址歧义，可 result.getSuggestAddrInfo() |\n\n### POI 检索常用 ERRORNO\n\n| 枚举值 | 含义 |\n|--------|------|\n| NO_ERROR | 成功 |\n| RESULT_NOT_FOUND | 未找到 |\n| AMBIGUOUS_KEYWORD | 关键字在本市无、其他城市有，可 result.getSuggestCityList() |\n\nFile v1.0.2:references/gradle.md\n\n# Gradle 集成 SDK\n\nAndroid 推荐通过 Gradle 依赖集成百度地图 SDK（国内版）。Google 渠道等需使用一体化包时请从官网下载后按「本地依赖」方式集成。\n\n**版本**：以下以 7.6.x / 9.6.x 为例，实际以官网更新为准。不写版本号可改为 `+` 或具体版本号；API 以工程内依赖版本为准，类/方法不存在时提示更新依赖，见 [SKILL.md](../SKILL.md) 规则 6。\n\n## 1. 配置仓库\n\n在 **Project** 的 `build.gradle` 中配置 `repositories`，添加 mavenCentral：\n\n```gradle\nallprojects {\n    repositories {\n        mavenCentral()\n    }\n}\n```\n\n若项目已使用 `dependencyResolutionManagement`（Gradle 7+），在 `settings.gradle` 或对应块中为百度 SDK 提供 mavenCentral 即可。\n\n## 2. 主工程依赖（app/build.gradle）\n\n在 **app** 的 `build.gradle` 的 `dependencies` 中按需添加。常用组合示例：\n\n| SDK | 依赖 |\n|-----|------|\n| 地图组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Map:7.6.7'` |\n| 检索组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Search:7.6.7'` |\n| 工具组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Util:7.6.7'` |\n| 步骑行导航组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-BWNavi:7.6.7'` |\n| 基础定位组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Location:9.6.6'` |\n| 全量定位组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Location_All:9.6.6'` |\n| 驾车导航组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-Navi:7.6.7'` |\n| 驾车+步骑行导航 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-AllNavi:7.6.7'` |\n| TTS 组件 | `implementation 'com.baidu.lbsyun:NaviTts:3.2.13'` |\n| 全景组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Panorama:2.9.0'` |\n\n**仅地图+检索+工具**示例：\n\n```gradle\ndependencies {\n    implementation 'com.baidu.lbsyun:BaiduMapSDK_Map:7.6.7'\n    implementation 'com.baidu.lbsyun:BaiduMapSDK_Search:7.6.7'\n    implementation 'com.baidu.lbsyun:BaiduMapSDK_Util:7.6.7'\n}\n```\n\n## 3. 组件冲突说明\n\n以下各组内**只能选其一**，不能同时引入：\n\n| 组 | 可选依赖 |\n|----|----------|\n| 定位 | 基础定位 `BaiduMapSDK_Location` **或** 全量定位 `BaiduMapSDK_Location_All` |\n| 地图/导航 | 地图 `BaiduMapSDK_Map`、步骑行 `BaiduMapSDK_Map-BWNavi`、驾车导航 `BaiduMapSDK_Map-Navi`、全部导航 `BaiduMapSDK_Map-AllNavi` 中选一（后三者已含地图） |\n\n按需求选：仅展示地图+检索用 Map+Search+Util；要步骑行实时导航用 Map-BWNavi；要驾车导航用 Map-Navi 或 Map-AllNavi。\n\n## 4. NDK 架构（abiFilters）\n\n在 app 的 `build.gradle` 的 `android.defaultConfig` 中配置 so 架构，按需保留：\n\n```gradle\nandroid {\n    defaultConfig {\n        ndk {\n            abiFilters \"armeabi-v7a\", \"arm64-v8a\", \"x86\", \"x86_64\"\n        }\n    }\n}\n```\n\n说明：官方文档曾包含 \"armeabi\"，目前新包多已不再提供，以实际 SDK 为准。\n\n## 5. 注意事项\n\n- **Gradle 仅支持国内版**：若需 Google 渠道或其它定制包，请到官网下载一体化包，采用「下载 SDK 本地依赖」方式（jar + so 放入 libs/jniLibs，并在 build.gradle 中配置 sourceSets 与 implementation fileTree）。\n- 集成完成后需配置 **AndroidManifest**（AK、权限、定位 Service）与 **混淆规则**，见 [project-config.md](project-config.md)；Application 初始化与隐私见 [overview.md](overview.md)。\n\n## 6. 环境与镜像（集成经验）\n\n以下为实际构建时的常见问题与处理，便于 Sync / 运行一次通过。\n\n| 问题 | 处理 |\n|------|------|\n| **Java 21 与 Gradle 8.2 不兼容** | 升级到 Gradle 8.7（或 8.5+），并同步升级 Android Gradle Plugin（如 8.5.2）。在 `gradle-wrapper.properties` 中设置 `distributionUrl=.../gradle-8.7-bin.zip`。 |\n| **Downloading gradle-8.7-bin.zip timeout** | 国内网络可将 `distributionUrl` 改为腾讯云镜像：`https://mirrors.cloud.tencent.com/gradle/gradle-8.7-bin.zip`；并把 `networkTimeout=10000` 改为 `60000`。 |\n| **NoClassDefFoundError: org/gradle/wrapper/IDownload** | 工程里的 `gradle-wrapper.jar` 与 Gradle 版本不一致（如仍为 8.2 的 jar 却用 8.7 的 distribution）。需替换为与 8.7 对应的 [官方 gradle-wrapper.jar](https://raw.githubusercontent.com/gradle/gradle/v8.7.0/gradle/wrapper/gradle-wrapper.jar)，校验 SHA-256 见 [Gradle release-checksums](https://gradle.org/release-checksums/)。 |\n| **无法定位 Java Runtime** | 终端/IDE 需能找到 JDK。macOS 下可把 Android Studio 自带 JDK 写入 `~/.zshrc`：`export JAVA_HOME=\"/Applications/Android Studio.app/Contents/jbr/Contents/Home\"` 与 `export PATH=\"$JAVA_HOME/bin:$PATH\"`。 |\n\nFile v1.0.2:references/location.md\n\n# 显示定位\n\n## 坐标系说明\n\n- 定位 SDK 支持国内输出：国测局坐标、百度墨卡托、百度经纬度；海外仅 WGS84。定位 SDK 默认输出 GCJ02，地图 SDK 默认 BD09LL；混用时需统一，见 [coordinate.md](coordinate.md)。\n\n## 前置条件\n\n- 开发包需包含定位能力（下载 SDK 时勾选基本定位）。\n- AndroidManifest：声明定位相关权限；在 `<application>` 内声明定位 Service 组件。\n\n## 开启定位图层与传数据\n\n1. 开启：`mBaiduMap.setMyLocationEnabled(true)`。\n2. 继承 `BDAbstractLocationListener`，在 `onReceiveLocation(BDLocation location)` 中构造 `MyLocationData` 并传给地图：\n   - `MyLocationData.Builder().accuracy(radius).direction(direction).latitude(lat).longitude(lng).build()`\n   - `mBaiduMap.setMyLocationData(locData)`。\n3. 使用 `LocationClient`：`LocationClient option = new LocationClient(context)`，`LocationClientOption` 设置 `setOpenGps`、`setCoorType(\"bd09ll\")`、`setScanSpan` 等，`setLocOption(option)`，`registerLocationListener(myLocationListener)`，`start()`。\n4. 生命周期：在 `onDestroy` 中 `mLocationClient.stop()`、`mBaiduMap.setMyLocationEnabled(false)`，再执行 MapView 的 `onDestroy()`。\n\n## MyLocationConfiguration（自定义样式）\n\n构造：`MyLocationConfiguration(LocationMode mode, boolean enableDirection, BitmapDescriptor customMarker, int accuracyCircleFillColor, int accuracyCircleStrokeColor)`。\n\n- **定位模式**：`LocationMode.NORMAL`（普通）、`LocationMode.FOLLOWING`（跟随）、`LocationMode.COMPASS`（罗盘）。\n- **自定义定位图标**：`BitmapDescriptorFactory.fromResource(R.drawable.xxx)` 传入。\n- **精度圈**：填充色、边框色用 ARGB；精度圈大小由定位精度自动决定，不可手动设。\n- 设置：`mBaiduMap.setMyLocationConfiguration(config)`。\n\n## 自定义定位图标（v7.5.7+）\n\n- Builder 构造：`MyLocationConfiguration.Builder(LocationMode locationMode, boolean enableArrow)`，enableArrow 为 true 表示箭头模式，false 为整体模式。\n- 方法：`setCustomMarker(BitmapDescriptor)`、`setMarkerSize(float)`（0.2~3 倍）、`setArrow(BitmapDescriptor)`、`setArrowSize(float)`、`setAnimation(boolean)`（中心图呼吸动画，非箭头模式 false）、`setGifMarker(String gifPath)`（中心 gif）。设置后通过 `setMyLocationConfiguration` 生效。\n\n## 注意\n\n- 定位频次在 LocationClientOption 中设置；详见定位 SDK 文档。\n- 定位指针方向依赖陀螺仪，需自行处理，不在地图 SDK 范畴。\n\nFile v1.0.2:references/mapview.md\n\n# 地图容器与 BaiduMap\n\n## 配置与初始化\n\n- **AndroidManifest**：在 `<application>` 内配置 AK：`<meta-data android:name=\"com.baidu.lbsapi.API_KEY\" android:value=\"您的AK\"/>`。在 `<application>` 外声明权限（如网络、定位等）；自 Android 6.0 起部分权限需代码动态申请。\n- **初始化**：在自定义 Application 的 `onCreate` 中调用 `SDKInitializer.initialize(this)` 和 `SDKInitializer.setCoordType(CoordType.BD09LL)`（或 GCJ02）。隐私接口必须在 initialize 之前调用，见 [overview.md](overview.md)。\n\n## 布局与获取 BaiduMap\n\n- 布局中声明：`<com.baidu.mapapi.map.MapView android:id=\"@+id/bmapView\" ... />`。\n- 代码获取：`MapView mMapView = findViewById(R.id.bmapView);`，`BaiduMap mBaiduMap = mMapView.getMap();`。\n- 纯代码：`MapView mapView = new MapView(this);` 然后 `setContentView(mapView)`。也可用 `BaiduMapOptions` 构造带初始状态的 MapView：`new MapView(this, options)`。\n\n## MapView 生命周期（必须）\n\n在 Activity 中：\n- `onResume()` 内调用 `mMapView.onResume()`\n- `onPause()` 内调用 `mMapView.onPause()`\n- `onDestroy()` 内调用 `mMapView.onDestroy()`\n\n## BaiduMapOptions 可选状态\n\n| 状态 | 含义 |\n|------|------|\n| mapStatus | 地图状态 |\n| compassEnable | 是否开启指南针，默认开启 |\n| mapType | 地图模式，默认普通地图 |\n| rotateGesturesEnabled | 是否允许旋转手势 |\n| scrollGesturesEnabled | 是否允许拖拽 |\n| overlookingGesturesEnabled | 是否允许俯视手势 |\n| zoomControlsEnabled | 是否显示缩放按钮 |\n| zoomControlsPosition | 缩放控件位置 |\n| zoomGesturesEnabled | 是否允许缩放手势 |\n| scaleControlEnabled | 是否显示比例尺 |\n| scaleControlPosition | 比例尺位置 |\n| logoPosition | Logo 位置 |\n\n## 地图类型与图层\n\n- **地图类型**（`mBaiduMap.setMapType(...)`）：\n  - `BaiduMap.MAP_TYPE_NORMAL`：普通地图（含 3D）\n  - `BaiduMap.MAP_TYPE_SATELLITE`：卫星图\n  - `BaiduMap.MAP_TYPE_NONE`：空白地图（不下载瓦片，可叠瓦片或覆盖物）\n- **实时路况**：`mBaiduMap.setTrafficEnabled(true)`。V4.5.0+ 可自定义路况颜色：`setCustomTrafficColor(严重拥堵, 拥堵, 缓行, 畅通)`，颜色格式 `#AARRGGBB`，不需显示的可将 AA 设为 00。\n- **百度城市热力图**：`mBaiduMap.setBaiduHeatMapEnabled(true)`；仅 11–20 级可显示。\n\n## 显示层级与比例尺\n\n- 缩放等级：2D 地图 4–21，3D 地图 19–21，卫星 4–20，路况/热力 11–21，室内 17–22。自 v5.0.0 起由 3–21 改为 4–21。\n- 设置缩放：`MapStatus.Builder builder = new MapStatus.Builder(); builder.zoom(18.0f); mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));`\n\n## 常用地图容器\n\n- **GLSurfaceView 系**：MapView、MapFragment、SupportMapFragment。\n- **TextureView 系**：TextureMapView、TextureMapFragment、TextureSupportMapFragment。与其它 GLSurfaceView（如相机）叠加或放在 ScrollView 时建议用 Texture 系，避免穿透、黑屏。需 Android 4.4+ 且开启硬件加速。\n- SupportMapFragment 使用：`SupportMapFragment.newInstance(mapOptions)`，再通过 FragmentTransaction 添加或替换到容器。\n\n## 多实例\n\n同一页面可放多个 MapView/SupportMapFragment，分别操作互不干扰。每个通过 `getBaiduMap()`/`getMapView()` 获取控制器与视图，分别设置 `MapStatusUpdate`、`setLogoPosition` 等。\n\n## 方法交互（BaiduMap）\n\n- **缩放**：`MapStatusUpdateFactory.zoomTo(level)`、`zoomIn()`、`zoomOut()`、`zoomBy(delta)`；`setMapStatus()` 为跳变，`animateMapStatus()` 为动画。级别超出范围时按最大/最小级别显示。\n- **操作区内边距**：`mBaiduMap.setViewPadding(left, top, right, bottom)`；地图加载完成后生效，可通过 `OnMapLoadedCallback.onMapLoaded()` 监听。不得遮挡百度 Logo 与版权。布局模式、面板高度、与 fitBounds 区分见 [ui-standards.md](ui-standards.md)。\n- **显示范围**：`MapStatusUpdateFactory.newLatLngBounds(bounds)` 或 `newLatLngBounds(bounds, width, height)`，bounds 由 `LatLngBounds.Builder().include(...).include(...).build()` 构造。\n- **中心点**：`MapStatusUpdateFactory.newLatLng(latLng)`。\n- **底图 POI**：`mBaiduMap.showMapPoi(false)` 可隐藏底图标注仅留道路。POI 标签按类型控制：`setPoiTagEnable(PoiTagType, boolean)`、`getPoiTagEnable(PoiTagType)`；PoiTagType 含 All、Epidemic、Travel、Shop 等。\n- **空白地图背景色**：仅当 `setMapType(MAP_TYPE_NONE)` 时生效，`mBaiduMap.setMapBackgroundColor(Color.argb(...))`。\n\nFile v1.0.2:references/marker.md\n\n# 点标记（Marker）\n\n## 添加 Marker\n\n- `LatLng point = new LatLng(lat, lng);`\n- `BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.xxx);`\n- `OverlayOptions option = new MarkerOptions().position(point).icon(bitmap);`\n- `mBaiduMap.addOverlay(option);` 返回 Overlay，可强转为 Marker。\n\n## MarkerOptions 常用属性\n\n| 名称 | 说明 |\n|------|------|\n| icon | 图标 BitmapDescriptor |\n| animateType | 动画类型：MarkerAnimateType.none / drop / grow / jump |\n| alpha | 透明度 |\n| position | 位置 LatLng |\n| perspective | 是否近大远小，默认 true |\n| draggable | 是否可拖拽 |\n| flat | 是否平贴地图（俯视效果） |\n| anchor | 锚点比例 |\n| rotate | 旋转角度 |\n| title | 标题 |\n| visible | 是否可见 |\n| extraInfo | 额外信息 Bundle |\n\n示例：`.position(point).icon(bitmap).draggable(true).flat(true).alpha(0.5f)`。\n\n## 事件\n\n- **点击**：`mBaiduMap.setOnMarkerClickListener(BaiduMap.OnMarkerClickListener)`，`onMarkerClick(Marker marker)`，返回 true 表示消费事件。\n- **拖拽**：需在 MarkerOptions 中 `draggable(true)`；`setOnMarkerDragListener`，回调 `onMarkerDrag`、`onMarkerDragEnd`、`onMarkerDragStart`。\n\n## 底图标注\n\n- `mBaiduMap.showMapPoi(false)` 可隐藏底图 POI，仅显示道路。\n\n## Marker 碰撞策略（v7.5.0+）\n\n- 属性：`isJoinCollision`（是否参与碰撞）、`isForceDisplay`（参与后是否强制展示）、`priority`（碰撞优先级，默认整型最大）、`startLevel`/`endLevel`（最小/最大展示层级，室外默认 4–21，室内至 22）。\n- 使用：`MarkerOptions().position(...).icon(...).isJoinCollision(true).isForceDisplay(true).priority(9)`，再 `addOverlay` 即生效。\n\n## 3D Marker（v7.5.2+）\n\n- 带高度的 Marker：先设高度，用 `projection.geoPoint3toScreenLocation(LatLng, height)` 转成屏幕点，再用 `projection.fromScreenLocation(Point)` 转回经纬度，然后按普通 Marker 添加。\n\n## Marker 的 Title（v7.5.7+）\n\n- 通过 `TitleOptions`：titleBgColor、titleFrontColor、titleFrontSize、titleAnchorX/Y、titileOffsetX/Y、titleRotate。\n- `MarkerOptions.titleOptions(titleOptions)`。\n\n## Marker 碰撞 POI（v7.5.7+）\n\n- `MarkerOptions.poiCollided(true)` 使 Marker 及其 title 可与底图 POI 碰撞。\n\nFile v1.0.2:references/overlays.md\n\n# 折线与多边形覆盖物\n\n## 折线 PolylineOptions\n\n- 坐标列表：`List<LatLng> points`。\n- 常用属性：`color`、`width`、`points`、`colorsValues`（分段颜色）、`customTexture` / `customTextureList` + `textureIndex`（分段纹理）、`visible`、`extraInfo`。\n- 添加：`OverlayOptions o = new PolylineOptions().width(10).color(0xAAFF0000).points(points);`，`mBaiduMap.addOverlay(o);` 返回可强转为 Polyline。\n\n## 虚线\n\n- 构造时：`PolylineOptions().dottedLine(true)`；或对已添加的 Polyline：`((Polyline)mPolyline).setDottedLine(true)`。\n\n## 分段颜色\n\n- `PolylineOptions().points(points).colorsValues(List<Integer> colors)`，colors 与线段段数对应。\n\n## 分段纹理\n\n- 纹理宽高建议 2 的幂；设纹理后折线颜色不生效。`customTextureList(List<BitmapDescriptor>)`、`textureIndex(List<Integer>)`；建议配合 `dottedLine(true)`。\n\n## Polyline 点击\n\n- `mBaiduMap.setOnPolylineClickListener(BaiduMap.OnPolylineClickListener)`，`onPolylineClick(Polyline polyline)` 返回 boolean。\n\n## 大地曲线\n\n- `PolylineOptions().isGeodesic(true).points(pointList)`；经度跨 180° 时需设置 `lineDirectionCross180(PolylineOptions.LineDirectionCross180.FROM_WEST_TO_EAST)`。点数 2–10000，且不能含 null。\n\n## 渐变色\n\n- `PolylineOptions().isGradient(true).points(points).colorsValues(List<Integer> colorValue)`，colorValue 为每个点的颜色，按索引与点对应。\n\n## Polyline 发光（v7.5.7+）\n\n- `PolylineOptions.bloomType(LineBloomType)`（默认不发光）、`bloomWidth(int)`、`bloomAlpha(int)`、`setBloomGradientASpeed(float)`、`setBloomBlurTimes(int)` 等。\n\n## 多边形\n\n- 使用 `PolygonOptions` 设置轮廓点、填充色、边框等，`mBaiduMap.addOverlay(polygonOptions)` 得到 Polygon。具体属性见类参考。\n\n## 路线 Overlay（开源）\n\n- 自 V3.6.0 起 Overlay 源码在 Demo 的 overlayutil 包：PoiOverlay、TransitRouteOverlay、WalkingRouteOverlay、BikingRouteOverlay、DrivingRouteOverlay、BusLineOverlay、MassTransitRouteOverlay 等，需自行拷贝到项目使用。\n\nFile v1.0.2:references/overview.md\n\n# 百度地图 Android SDK 集成与核心 API 摘要\n\nSDK 集成方式：推荐通过 **Gradle** 依赖（见 [gradle.md](gradle.md)）；AndroidManifest、混淆等见 [project-config.md](project-config.md)。\n\n## 使用准备与 AK\n\n1. 申请百度账号并完成开发者认证。\n2. 在控制台「应用管理 - 我的应用」创建应用，应用类型选 **Android SDK**，填写：\n   - 应用名称、**包名**（与 build.gradle 的 applicationId 一致）、**SHA1**（debug/release 可各填一个）。\n   - 勾选所需服务（地图、检索、路线等），未勾选则对应接口可能返回无权限。\n3. 将生成的 AK 配置到工程：AndroidManifest 的 `<application>` 内 `<meta-data android:name=\"com.baidu.lbsapi.API_KEY\" android:value=\"您的AK\"/>`，或代码中 `SDKInitializer.setApiKey(\"ak\")`（须在 `initialize` 之前）。包名与签名须与申请一致。鉴权结果由 SDK 通过广播回调（成功/失败/网络错误），失败时 Intent 带错误码与错误信息，排查与广播 Action 见 [project-config.md](project-config.md)。\n\n**SHA1**：调试版 `keytool -list -v -keystore ~/.android/debug.keystore`，默认口令 `android`。发布版用 release keystore。\n\n## 隐私合规（v7.5.0+）\n\n- 调用 SDK 任何接口前必须先调用隐私合规接口，且**必须在 `SDKInitializer.initialize` 之前**调用。\n- 定位 SDK：不同意则无法正常获取位置；地图 SDK：不同意则检索、路线等请求异常。\n- 统一接口：`SDKInitializer.setAgreePrivacy(Context context, boolean isEnable)`，context 必须为 Application Context；`isEnable` 为 true 表示用户同意隐私政策。\n- 推荐写法：在 Application 中先 `setAgreePrivacy`，再在 try-catch 中 `initialize`（可捕获 BaiduMapSDKException）。可按用户是否同意隐私分别设置；未同意时 `setAgreePrivacy(context, false)`，同意后再设为 true 并初始化。\n\n```java\n// 用户同意后，必须在 initialize 之前调用\nSDKInitializer.setAgreePrivacy(getApplicationContext(), true);\ntry {\n    SDKInitializer.initialize(this);\n} catch (BaiduMapSDKException e) {\n    // 初始化失败可记录日志\n}\nSDKInitializer.setCoordType(CoordType.BD09LL);\n```\n\n## Application 初始化\n\n```java\npublic class DemoApplication extends Application {\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SDKInitializer.setAgreePrivacy(getApplicationContext(), true); // 必须先于 initialize\n        try {\n            SDKInitializer.initialize(this);\n        } catch (BaiduMapSDKException e) { }\n        SDKInitializer.setCoordType(CoordType.BD09LL); // 或 CoordType.GCJ02，自 4.3.0\n    }\n}\n```\n\n## MapView 与 BaiduMap 生命周期\n\n- 布局中声明 `MapView`（或代码 `new MapView(this)`），Activity 中 `mMapView.getMap()` 得到 `BaiduMap`。\n- **必须在 Activity 中调用**：`onResume()` → `mMapView.onResume()`；`onPause()` → `mMapView.onPause()`；`onDestroy()` → `mMapView.onDestroy()`。\n\n## 核心类速查\n\n| 用途 | 类/接口 |\n|------|---------|\n| 初始化、坐标类型 | SDKInitializer、CoordType |\n| 地图控件与控制器 | MapView、BaiduMap、SupportMapFragment、TextureMapView |\n| 地图状态 | MapStatus、MapStatusUpdate、MapStatusUpdateFactory、MapStatus.Builder |\n| 经纬度 | LatLng |\n| 点标记 | Marker、MarkerOptions、BitmapDescriptor、BitmapDescriptorFactory |\n| 折线/多边形 | Polyline、PolylineOptions、Polygon、PolygonOptions |\n| POI 检索 | PoiSearch、PoiCitySearchOption、PoiNearbySearchOption、PoiBoundSearchOption、PoiDetailSearchOption、OnGetPoiSearchResultListener、PoiResult、PoiDetailSearchResult |\n| 地理编码 | GeoCoder、GeoCodeOption、ReverseGeoCodeOption、OnGetGeoCoderResultListener、GeoCodeResult、ReverseGeoCodeResult |\n| 路线规划 | RoutePlanSearch、DrivingRoutePlanOption、PlanNode、OnGetRoutePlanResultListener、DrivingRouteResult；步行/骑行/公交对应 Option/Result |\n| 路线 Overlay（开源） | DrivingRouteOverlay、WalkingRouteOverlay、BikingRouteOverlay、TransitRouteOverlay、PoiOverlay |\n| 步行/骑行导航 | WalkNavigateHelper、BikeNavigateHelper、WalkNaviLaunchParam、BikeNaviLaunchParam、诱导与 TTS 监听 |\n| 定位 | LocationClient、LocationClientOption、BDAbstractLocationListener、MyLocationData、MyLocationConfiguration、LocationMode |\n| 室内图 | BaiduMap.setOnBaseIndoorMapListener、switchBaseIndoorMapFloor |\n| 坐标转换 | CoordinateConverter、CoordType.GPS/COMMON/BD09MC 等 |\n\n## 检索与路线注意点\n\n- **监听先于请求**：POI 先 `setOnGetPoiSearchResultListener` 再 `searchInCity`/`searchNearby`/`searchInBound`/`searchPoiDetail`；路线先 `setOnGetRoutePlanResultListener` 再 `drivingSearch`/`walkingSearch` 等。\n- 使用完毕后 `destroy()` 释放 PoiSearch、RoutePlanSearch、GeoCoder 等实例。\n\n## 系统与包说明\n\n- 支持 Android 4.0+；支持 armeabi-v7a、arm64-v8a、x86、x86_64。\n- 自 V3.6.0 起覆盖物相关类开源（OverlayManager、PoiOverlay、TransitRouteOverlay、WalkingRouteOverlay、DrivingRouteOverlay、BusLineOverlay 等），可从 Demo 的 overlayutil 包获取。\n- 自 v4.5.0 支持 HTTPS，V5.3.2 起默认 HTTPS；Android P+ 禁止明文，检索建议用 HTTPS 或配置 network_security_config。\n\nFile v1.0.2:references/project-config.md\n\n# 工程配置\n\n**边界**：AndroidManifest、Gradle 混淆、百度 SDK 相关工程配置；Gradle 依赖见 [gradle.md](gradle.md)。\n\n## AndroidManifest\n\n### 配置 AK\n\n在 `<application>` 内添加 meta-data：\n\n```xml\n<meta-data\n    android:name=\"com.baidu.lbsapi.API_KEY\"\n    android:value=\"您的AK\" />\n```\n\n也可在代码中通过 `SDKInitializer.setApiKey(\"您的AK\")` 设置（**必须在 `initialize` 之前**调用，且优先于 Manifest 中的 meta-data）。\n\n**控制台配置**：在百度开放平台「应用管理 - 我的应用」创建应用，应用类型选 **Android SDK**；包名填写与 `build.gradle` 中 **applicationId** 完全一致；SHA1 填写调试/发布签名对应值（调试：`keytool -list -v -keystore ~/.android/debug.keystore`，默认口令 `android`）。勾选所需服务（地图、检索、路线规划等），未勾选则对应能力鉴权不通过。\n\n### AK 鉴权结果与排查\n\n- **鉴权方式**：SDK 在 `initialize` 后异步向服务端校验 AK，结果通过**广播**通知。\n- **广播 Action**（常量在 `SDKInitializer` 中）：\n  - `SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK`：AK 验证成功。\n  - `SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR`：AK 验证失败；Intent 附加 `SDK_BROADTCAST_INTENT_EXTRA_INFO_KEY_ERROR_CODE`（int）、`SDK_BROADTCAST_INTENT_EXTRA_INFO_KEY_ERROR_MESSAGE`（String）。\n  - `SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR`：网络错误，鉴权可能未完成。\n- **监听方式**：在 Activity 或 Application 中注册 `BroadcastReceiver`，过滤上述 Action；在 `onResume` 注册、`onPause` 注销，避免泄漏。收到 OK 可提示“鉴权成功”，收到 ERROR 可提示错误码与错误信息便于排查。\n- **常见失败原因**：包名与控制台不一致（必须与 applicationId 一致）；SHA1 与当前签名不一致（换 keystore 或打包方式后需更新控制台 SHA1）；控制台未勾选对应服务（如路线规划）；网络不可用。错误码含义见 [errorcode.md](errorcode.md)（如 101 AK 不存在、200 APP 不存在/AK 有误、240 服务被禁用）。\n\n### 权限\n\n在 manifest 中声明所需权限，例如：\n\n```xml\n<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n<uses-permission android:name=\"android.permission.INTERNET\" />\n<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />\n<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />\n```\n\n自 Android 6.0 起，危险权限需在运行时申请。\n\n### 主题与 Activity（避免闪退）\n\n使用 **AppCompatActivity** 时，`<application>` 的 `android:theme` 必须为 **Theme.AppCompat** 或其子类（如 `Theme.AppCompat.Light.NoActionBar`）。若使用系统主题 `@android:style/Theme.Material.Light.NoActionBar`，会在 `setContentView` 时抛出：\n\n`IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.`\n\n推荐在 AndroidManifest 中设置：\n\n```xml\nandroid:theme=\"@style/Theme.AppCompat.Light.NoActionBar\"\n```\n\n（由 `androidx.appcompat` 提供，无需在 styles.xml 中再定义。）\n\n### 定位 Service（使用定位时）\n\n使用地图定位或定位 SDK 时，在 `<application>` 内声明定位服务组件（具体组件名以当前 SDK 文档为准，例如）：\n\n```xml\n<service\n    android:name=\"com.baidu.location.f\"\n    android:enabled=\"true\"\n    android:process=\":remote\" />\n```\n\n请以官方「显示定位」或「Android Studio 配置」文档中的声明为准。\n\n## 混淆（ProGuard）\n\n发布包混淆时，百度地图相关类不得被混淆，否则易出现网络不可用等运行时异常。\n\n1. 在 app 的 `build.gradle` 的 `buildTypes.release`（若 debug 也混淆则一并配置）中启用混淆规则文件：\n\n```gradle\nbuildTypes {\n    release {\n        minifyEnabled true\n        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n    }\n}\n```\n\n2. 在 `proguard-rules.pro` 中添加：\n\n```\n-keep class com.baidu.** { *; }\n-keep class vi.com.** { *; }\n-keep class com.baidu.vi.** { *; }\n-dontwarn com.baidu.**\n```\n\n## 资源说明（V5.1.0+）\n\n自 V5.1.0 起，部分原 jar 内图片资源移至官方示例工程的 assets，若使用到路线/公交等 Overlay 图标，可从官网下载对应 Android 示例工程，将 `app/src/main/assets/` 下相关资源拷贝到本工程 assets。常见文件名包括：Icon_end.png、Icon_start.png、Icon_line_node.png、Icon_bus_station.png、Icon_subway_station.png、Icon_walk_route.png 等。步骑行导航一体化包解压后若带 assets 目录，也需拷贝到项目 assets。\n\n## 集成经验与常见问题\n\n以下为实际集成地图展示时的常见坑与建议，便于一次跑通。\n\n**排查顺序**（Agent 建议遵守）：先确认 **主题**（AppCompat）与 **compileSdk**（如 34）；再确认 **Application** 中隐私与 `initialize` 顺序、**AK/包名/SHA1** 与控制台一致；仍有闪退或地图不显示时查 **Logcat**（MapApplication、MainActivity、AndroidRuntime）及 **MapView 生命周期**（onResume/onPause/onDestroy 是否调用）。\n\n| 问题 | 原因 / 建议 |\n|------|--------------|\n| **闪退：You need to use a Theme.AppCompat theme** | 见上文「主题与 Activity」：必须使用 `@style/Theme.AppCompat.Light.NoActionBar` 等 AppCompat 主题，勿用 `@android:style/Theme.Material.*`。 |\n| **AAR 要求 compileSdk 34** | 依赖（如 `androidx.activity:activity:1.8.0`）可能要求 compileSdk ≥ 34。在 app 的 `build.gradle` 中设置 `compileSdk = 34`；targetSdk 可单独保留为 33。 |\n| **MapView 在部分设备/模拟器上闪退** | 若在 `onCreate` 中立即 `getMap()` 导致崩溃，可将 `getMap()` 延后到 **onResume()** 中首次调用，并做 null 判断与 try-catch，便于排查。 |\n| **Application 初始化失败** | Application 中建议用 `catch (Throwable)` 并打 Log（如 `Log.e(TAG, \"Baidu SDK init failed\", e)`），便于通过 Logcat 确认是否为 SDK 初始化或 AK/包名问题。 |\n| **鉴权失败、地图不显示、路线/检索无结果** | 先确认控制台包名=applicationId、SHA1 与当前签名一致、已勾选对应服务；监听鉴权广播（PERMISSION_CHECK_ERROR）获取错误码与错误信息，对照 [errorcode.md](errorcode.md)。 |\n\n## 后续\n\nApplication 内初始化与隐私接口见 [overview.md](overview.md)；显示地图与 MapView 生命周期见 [mapview.md](mapview.md)。Gradle 版本与国内镜像见 [gradle.md](gradle.md)。\n\nArchive v1.0.1: 17 files, 34922 bytes\n\nFiles: references/class-reference.md (4934b), references/coordinate.md (1733b), references/errorcode.md (1660b), references/gradle.md (4754b), references/location.md (2574b), references/mapview.md (4649b), references/marker.md (2319b), references/overlays.md (2110b), references/overview.md (5331b), references/project-config.md (6608b), references/reference.md (5559b), references/route.md (4475b), references/search.md (3735b), references/tools.md (3596b), references/ui-standards.md (7893b), SKILL.md (5526b), _meta.json (140b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: baidu-map-android-sdk\ndescription: 百度地图 Android SDK 集成与开发规范。覆盖地图展示、MapView/BaiduMap 生命周期、定位、标注与覆盖物、POI 检索、路线规划、步骑行导航；输出符合隐私与 AK 配置的 Android 地图方案。在开发 Android 地图应用、集成百度地图 SDK、MapView、路线规划、POI、导航时使用。\ncompatibility: Android, Gradle, Android Studio\n---\n\n# 百度地图 Android SDK\n\n## 目标与边界\n\n- **目标**：在 Android 工程中正确集成百度地图 SDK，并给出符合隐私、AK、坐标系规范的实现方案。\n- **负责**：地图展示、MapView 生命周期、覆盖物、POI/路线/地理编码检索、步骑行导航等；以技能内 references 为准。\n- **不负责**：服务端逻辑、非百度 SDK、UI 视觉设计。\n\n## 使用时机\n\n满足其一即启用本技能：\n\n- 关键词：百度地图 Android、MapView、BaiduMap、AK、路线规划、POI 检索、步骑行导航、BD09、坐标类型\n- 需求类型：地图展示、定位、标注与覆盖物、POI/地点检索、路线规划与画线、步行/骑行实时导航、地理编码\n\n**按需加载**：先根据需求在 [reference.md](references/reference.md) 中选定文档，再引用对应 references 内容；需求含糊时先向用户澄清**再给方案**。\n\n## 必须遵守的规则\n\n1. **隐私与初始化（v7.5.0+）**\n   - 调用 SDK 任何接口前必须先调用隐私合规接口，且**必须在 `SDKInitializer.initialize` 之前**调用。见 [overview.md](references/overview.md) 隐私合规小节。\n   - Application 中：`SDKInitializer.initialize(this)`；自 4.3.0 起可用 `SDKInitializer.setCoordType(CoordType.BD09LL)` 或 `CoordType.GCJ02`。\n\n2. **AK 与配置**\n   - 使用前需在控制台申请 Android SDK 密钥（AK），应用类型选「Android SDK」，填写包名、SHA1。AK 配置到 AndroidManifest 或 `SDKInitializer.setApiKey`；包名与签名须与申请一致。见 [overview.md](references/overview.md)。\n\n3. **MapView 生命周期**\n   - Activity 的 `onResume`/`onPause`/`onDestroy` 中必须分别调用 `mMapView.onResume()`、`mMapView.onPause()`、`mMapView.onDestroy()`。见 [mapview.md](references/mapview.md)。\n\n4. **坐标系**\n   - 国内默认 BD09LL；可与 GCJ02 通过 `SDKInitializer.setCoordType` 统一。与定位混用时与定位 SDK 坐标类型一致；转换见 [coordinate.md](references/coordinate.md)。\n\n5. **检索与路线**\n   - **监听先于请求**：先 `setOnGetPoiSearchResultListener` 再 `searchNearby` 等；先 `setOnGetRoutePlanResultListener` 再 `drivingSearch` 等，否则可能拿不到回调。用完后 `destroy()` 释放实例。\n\n6. **版本与 API 以工程为准**\n   - 用户已集成 SDK 时，以其实机/工程内版本为准。若某类或方法**不存在**（编译报错或依赖中无此符号），**提示用户将对应依赖更新到兼容版本**后再重试，勿强行写不存在的 API。\n\n7. **步骑行：按需求区分**\n   - **路线规划（算路+画线）**：RoutePlanSearch（驾车/步行/骑行/公交），得到路线后自绘折线或使用开源 Overlay。见 [route.md](references/route.md)。\n   - **步骑行实时导航**：步行/骑行导航引擎、诱导、TTS、偏航纠偏等，类见 [overview.md](references/overview.md) 与 [class-reference.md](references/class-reference.md)。\n   - 二者是**不同服务**：仅需画线用 route；需实时诱导/TTS 用步骑行导航。给出方案前先按开发者需求选对文档。\n\n## 输出规范（可评估）\n\n- **可落地**：含具体类名、方法、调用顺序与必要配置（AndroidManifest、Application、AK、隐私）。\n- **可验证**：隐私与 AK 明确；检索/路线监听顺序正确；若涉及定位/鉴权失败，方案可指向 [location.md](references/location.md) 或 [project-config.md](references/project-config.md) 的排查项。\n- **可组合**：按 [reference.md](references/reference.md) 选文档与常见组合。无特殊要求时界面与交互遵循 [ui-standards.md](references/ui-standards.md)。\n\n方案结构：需求 → 对应文档 → 配置与依赖 → 关键 API → 示例片段 → 注意事项。\n\n## 参考索引\n\n- 按需求选文档与常见组合：[reference.md](references/reference.md)\n- Gradle 集成（依赖、冲突、NDK、环境与国内镜像）：[gradle.md](references/gradle.md)\n- AndroidManifest、主题、混淆、集成经验与常见问题：[project-config.md](references/project-config.md)\n- 集成、AK、隐私、生命周期、核心类：[overview.md](references/overview.md)\n- 地图容器、类型、层级、方法交互：[mapview.md](references/mapview.md)\n- 显示定位、定位模式、自定义图标：[location.md](references/location.md)\n- 点标记、Marker 属性与事件：[marker.md](references/marker.md)\n- 折线、多边形、Polyline 属性：[overlays.md](references/overlays.md)\n- POI、地理编码、逆地理：[search.md](references/search.md)\n- 路线规划与 Overlay：[route.md](references/route.md)\n- 坐标转换与坐标系：[coordinate.md](references/coordinate.md)\n- 距离/面积、点与图形关系、调起地图、短地址分享：[tools.md](references/tools.md)\n- 错误码：[errorcode.md](references/errorcode.md)\n- 类与包速查：[class-reference.md](references/class-reference.md)\n- 检索/路线/选点/弹窗/Logo 等 UI 与交互约定：[ui-standards.md](references/ui-standards.md)\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn778b6bf766ym71fdvrc5yvg98319rv\",\n  \"slug\": \"baidu-map-android-sdk\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1773219403336\n}\n\nFile v1.0.1:references/class-reference.md\n\n# 类与包速查\n\n以下为百度地图 Android SDK 常用类与包，便于按能力查找。具体方法、参数以工程所集成的 SDK 版本为准。\n\n## 初始化与配置\n\n- `com.baidu.mapapi.SDKInitializer`：initialize、setApiKey、setCoordType、setAgreePrivacy、getCoordType\n- `com.baidu.mapapi.CoordType`：BD09LL、GCJ02\n\n## 地图容器与控制器\n\n- `com.baidu.mapapi.map.MapView`、`BaiduMap`、`getMap()`、onResume/onPause/onDestroy\n- `com.baidu.mapapi.map.SupportMapFragment`、`TextureMapView`、`TextureSupportMapFragment`\n- `com.baidu.mapapi.map.BaiduMapOptions`：mapType、compassEnable、zoomGesturesEnabled 等\n\n## 地图状态与视野\n\n- `MapStatus`、`MapStatus.Builder`、`MapStatusUpdate`、`MapStatusUpdateFactory`\n- `MapStatusUpdateFactory.zoomTo/zoomIn/zoomOut/zoomBy`、`newLatLng`、`newLatLngBounds`、`newMapStatus`\n- `BaiduMap`：setMapStatus、animateMapStatus、setMapType、setTrafficEnabled、setBaiduHeatMapEnabled、setViewPadding、showMapPoi、setPoiTagEnable、setMapBackgroundColor\n\n## 几何与覆盖物基础\n\n- `com.baidu.mapapi.model.LatLng`、`LatLngBounds`、`LatLngBounds.Builder`\n- `com.baidu.mapapi.map.BitmapDescriptor`、`BitmapDescriptorFactory`\n- `OverlayOptions`、`Overlay`、`BaiduMap.addOverlay`、`clear`\n- `Marker`、`MarkerOptions`：position、icon、draggable、flat、alpha、animateType、titleOptions、isJoinCollision、poiCollided 等\n- `Polyline`、`PolylineOptions`：points、width、color、dottedLine、colorsValues、customTextureList、textureIndex、isGeodesic、isGradient、bloomType 等\n- `Polygon`、`PolygonOptions`\n\n## 事件监听\n\n- `BaiduMap.OnMarkerClickListener`、`OnMarkerDragListener`、`OnPolylineClickListener`、`OnMapLoadedCallback`\n\n## 定位\n\n- `com.baidu.location.LocationClient`、`LocationClientOption`、`BDAbstractLocationListener`、`BDLocation`\n- `com.baidu.mapapi.map.MyLocationData`、`MyLocationConfiguration`、`LocationMode`（NORMAL、FOLLOWING、COMPASS）\n- `BaiduMap`：setMyLocationEnabled、setMyLocationData、setMyLocationConfiguration\n\n## 检索\n\n- `com.baidu.mapapi.search.poi.PoiSearch`、`PoiSearch.newInstance()`、setOnGetPoiSearchResultListener、searchInCity、searchNearby、searchInBound、searchPoiDetail、destroy\n- `PoiCitySearchOption`、`PoiNearbySearchOption`、`PoiBoundSearchOption`、`PoiDetailSearchOption`\n- `OnGetPoiSearchResultListener`、`PoiResult`、`PoiDetailSearchResult`、`PoiInfo`\n- `com.baidu.mapapi.search.geocode.GeoCoder`、`GeoCodeOption`、`ReverseGeoCodeOption`、`OnGetGeoCoderResultListener`、`GeoCodeResult`、`ReverseGeoCodeResult`\n\n## 路线规划\n\n- `com.baidu.mapapi.search.route.RoutePlanSearch`、`RoutePlanSearch.newInstance()`、setOnGetRoutePlanResultListener、drivingSearch、walkingSearch、ridingSearch、transitSearch、destroy\n- `PlanNode`、`PlanNode.withCityNameAndPlaceName`、`PlanNode.withLocation`\n- `DrivingRoutePlanOption`、`WalkingRoutePlanOption`、`BikingRoutePlanOption`、`TransitRoutePlanOption`\n- `OnGetRoutePlanResultListener`、`DrivingRouteResult`、`WalkingRouteResult`、`BikingRouteResult`、`TransitRouteResult`、`getRouteLines()`\n- 开源 Overlay：DrivingRouteOverlay、WalkingRouteOverlay、BikingRouteOverlay、TransitRouteOverlay、PoiOverlay（overlayutil 包）\n\n## 步骑行导航（实时诱导）\n\n- WalkNavigateHelper、BikeNavigateHelper、WalkNaviLaunchParam、BikeNaviLaunchParam、initNaviEngine、routePlanWithParams、onCreate（诱导 View）、startWalkNavi/startBikeNavi、setRouteGuidanceListener、setTTsPlayer、resume/pause/quit\n\n## 坐标转换\n\n- `com.baidu.mapapi.utils.CoordinateConverter`、`CoordType.GPS`、`COMMON`、`BD09MC` 等、`from()`、`coord()`、`convert()`\n\n## 室内图\n\n- `BaiduMap.setOnBaseIndoorMapListener`、`switchBaseIndoorMapFloor`、MapBaseIndoorMapInfo、SwitchFloorError\n\n## 投影与 3D Marker\n\n- `BaiduMap.getProjection()`、`projection.geoPoint3toScreenLocation(LatLng, height)`、`fromScreenLocation(Point)`\n\n## 工具（BaiduMapSDK_Util）\n\n- **距离与面积**：`DistanceUtil.getDistance(LatLng, LatLng)` 返回米；`AreaUtil.calculateArea(LatLng northeast, LatLng southwest)` 返回平方米。\n- **点与图形**：`SpatialRelationUtil.isCircleContainsPoint(center, radius, point)`、`isPolygonContainsPoint(points, pt)`、`getNearestPointFromLine(points, pt)`。\n- **调起百度地图**：`BaiduMapRoutePlan`（RouteParaOption、openBaiduMapTransitRoute 等）、`BaiduMapNavigation`（NaviParaOption、openBaiduMapWalkNavi 等）、`BaiduMapPoiSearch`（PoiParaOption、openBaiduMapPoiNearbySearch、openBaiduMapPoiDetialsPage、openBaiduMapPanoShow），调起后调用对应 `finish(context)`。\n- **短地址分享**：`ShareUrlSearch`、OnGetShareUrlResultListener、PoiDetailShareURLOption、LocationShareURLOption、RouteShareURLOption、requestPoiDetailShareUrl/requestLocationShareUrl/requestRouteShareUrl，ShareUrlResult.getUrl()，destroy()。\n\nFile v1.0.1:references/coordinate.md\n\n# 坐标转换与坐标系\n\n## 坐标系类型\n\n- **WGS84**：GPS 常用大地坐标系。\n- **GCJ02**：国测局坐标系，由 WGS84 加密。\n- **BD09**：百度坐标系，在 GCJ02 上再次加密。BD09LL 为百度经纬度，BD09MC 为百度墨卡托米制。\n- 国内（含港澳台）：地图 SDK 默认输入输出 BD09LL；可全局声明为 GCJ02，则全应用输入/输出为 GCJ02。海外统一 WGS84。\n- 定位 SDK 默认输出 GCJ02；与地图混用时需统一，通常地图设为 BD09LL 且定位设置 `setCoorType(\"bd09ll\")`，或地图设为 GCJ02。\n\n## 全局坐标类型（自 4.3.0）\n\n- `SDKInitializer.setCoordType(CoordType.BD09LL);` 或 `CoordType.GCJ02;` 声明全局类型。\n- `SDKInitializer.getCoordType();` 获取当前类型。\n- 自动转换仅适用于国内 GCJ02 输入；海外用 WGS84 无需转换。\n\n## 通用坐标转换（CoordinateConverter）\n\n- 将 WGS84/GCJ02 等转为 BD09LL（或当前声明的类型），需使用 SDK 提供的 CoordinateConverter，勿用非官方算法。\n- 示例（其它坐标系 → 百度经纬度）：\n  - 高德/腾讯等（COMMON）：`CoordinateConverter().from(CoordType.COMMON).coord(sourceLatLng).convert();`\n  - GPS 设备原始坐标：`CoordinateConverter().from(CoordinateConverter.CoordType.GPS).coord(sourceLatLng).convert();`\n- BD09MC → BD09LL：`from(CoordType.BD09MC).coord(sourceLatLng).convert();`\n- 返回 `LatLng desLatLng = converter.convert();`\n\n## 注意事项\n\n- 国内非 BD09LL 坐标需先转为 BD09LL 再叠加到百度地图，否则会偏移。\n- 海外 POI 使用 WGS84，地图海外也为 WGS84，无需转换。同时使用国内外数据时，自动坐标转换方式不适用，需手动按场景转换。\n\nFile v1.0.1:references/errorcode.md\n\n# 错误码对照表\n\n检索、路线等接口返回结果中带 error/errorCode 时，可参考下表。更多可查官方错误码文档。\n\n| 状态码 | 含义 |\n|--------|------|\n| 0 | 正常 |\n| 1 | 服务器内部错误（超时或系统错误） |\n| 10 | 上传内容超过 8M |\n| 101 | AK 参数不存在 |\n| 102 | mcode 参数不存在（Mobile 类型必需 Mcode） |\n| 200 | APP 不存在，AK 有误 |\n| 201 | APP 被用户禁用 |\n| 202 | APP 被管理员删除 |\n| 203 | APP 类型错误（Server/Mobile/Browser 等） |\n| 210 | APP IP 校验失败 |\n| 211 | APP SN 校验失败 |\n| 220 | APP Referer 校验失败 |\n| 230 | APP Mcode 校验失败 |\n| 240 | APP 服务被禁用 |\n| 250 | 用户不存在 |\n| 251 | 用户被自己删除 |\n| 252 | 用户被管理员删除 |\n| 260 | 服务不存在 |\n| 261 | 服务被禁用 |\n| 301 | 永久配额超限 |\n| 302 | 天配额超限 |\n| 401 | 并发量超过约定并发配额 |\n| 402 | 并发超限且总并发也超总配额 |\n\n检索/路线结果判断：结果类（如 PoiResult、DrivingRouteResult）有 **result.error** 字段，类型为 **SearchResult.ERRORNO**（枚举）。成功：`result.error == SearchResult.ERRORNO.NO_ERROR`。\n\n### 路线规划常用 ERRORNO\n\n| 枚举值 | 含义 |\n|--------|------|\n| NO_ERROR | 成功 |\n| RESULT_NOT_FOUND | 未找到路线 |\n| AMBIGUOUS_ROURE_ADDR | 起终点或途经点地址歧义，可 result.getSuggestAddrInfo() |\n\n### POI 检索常用 ERRORNO\n\n| 枚举值 | 含义 |\n|--------|------|\n| NO_ERROR | 成功 |\n| RESULT_NOT_FOUND | 未找到 |\n| AMBIGUOUS_KEYWORD | 关键字在本市无、其他城市有，可 result.getSuggestCityList() |\n\nFile v1.0.1:references/gradle.md\n\n# Gradle 集成 SDK\n\nAndroid 推荐通过 Gradle 依赖集成百度地图 SDK（国内版）。Google 渠道等需使用一体化包时请从官网下载后按「本地依赖」方式集成。\n\n**版本**：以下以 7.6.x / 9.6.x 为例，实际以官网更新为准。不写版本号可改为 `+` 或具体版本号；API 以工程内依赖版本为准，类/方法不存在时提示更新依赖，见 [SKILL.md](../SKILL.md) 规则 6。\n\n## 1. 配置仓库\n\n在 **Project** 的 `build.gradle` 中配置 `repositories`，添加 mavenCentral：\n\n```gradle\nallprojects {\n    repositories {\n        mavenCentral()\n    }\n}\n```\n\n若项目已使用 `dependencyResolutionManagement`（Gradle 7+），在 `settings.gradle` 或对应块中为百度 SDK 提供 mavenCentral 即可。\n\n## 2. 主工程依赖（app/build.gradle）\n\n在 **app** 的 `build.gradle` 的 `dependencies` 中按需添加。常用组合示例：\n\n| SDK | 依赖 |\n|-----|------|\n| 地图组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Map:7.6.7'` |\n| 检索组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Search:7.6.7'` |\n| 工具组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Util:7.6.7'` |\n| 步骑行导航组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-BWNavi:7.6.7'` |\n| 基础定位组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Location:9.6.6'` |\n| 全量定位组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Location_All:9.6.6'` |\n| 驾车导航组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-Navi:7.6.7'` |\n| 驾车+步骑行导航 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-AllNavi:7.6.7'` |\n| TTS 组件 | `implementation 'com.baidu.lbsyun:NaviTts:3.2.13'` |\n| 全景组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Panorama:2.9.0'` |\n\n**仅地图+检索+工具**示例：\n\n```gradle\ndependencies {\n    implementation 'com.baidu.lbsyun:BaiduMapSDK_Map:7.6.7'\n    implementation 'com.baidu.lbsyun:BaiduMapSDK_Search:7.6.7'\n    implementation 'com.baidu.lbsyun:BaiduMapSDK_Util:7.6.7'\n}\n```\n\n## 3. 组件冲突说明\n\n以下各组内**只能选其一**，不能同时引入：\n\n| 组 | 可选依赖 |\n|----|----------|\n| 定位 | 基础定位 `BaiduMapSDK_Location` **或** 全量定位 `BaiduMapSDK_Location_All` |\n| 地图/导航 | 地图 `BaiduMapSDK_Map`、步骑行 `BaiduMapSDK_Map-BWNavi`、驾车导航 `BaiduMapSDK_Map-Navi`、全部导航 `BaiduMapSDK_Map-AllNavi` 中选一（后三者已含地图） |\n\n按需求选：仅展示地图+检索用 Map+Search+Util；要步骑行实时导航用 Map-BWNavi；要驾车导航用 Map-Navi 或 Map-AllNavi。\n\n## 4. NDK 架构（abiFilters）\n\n在 app 的 `build.gradle` 的 `android.defaultConfig` 中配置 so 架构，按需保留：\n\n```gradle\nandroid {\n    defaultConfig {\n        ndk {\n            abiFilters \"armeabi-v7a\", \"arm64-v8a\", \"x86\", \"x86_64\"\n        }\n    }\n}\n```\n\n说明：官方文档曾包含 \"armeabi\"，目前新包多已不再提供，以实际 SDK 为准。\n\n## 5. 注意事项\n\n- **Gradle 仅支持国内版**：若需 Google 渠道或其它定制包，请到官网下载一体化包，采用「下载 SDK 本地依赖」方式（jar + so 放入 libs/jniLibs，并在 build.gradle 中配置 sourceSets 与 implementation fileTree）。\n- 集成完成后需配置 **AndroidManifest**（AK、权限、定位 Service）与 **混淆规则**，见 [project-config.md](project-config.md)；Application 初始化与隐私见 [overview.md](overview.md)。\n\n## 6. 环境与镜像（集成经验）\n\n以下为实际构建时的常见问题与处理，便于 Sync / 运行一次通过。\n\n| 问题 | 处理 |\n|------|------|\n| **Java 21 与 Gradle 8.2 不兼容** | 升级到 Gradle 8.7（或 8.5+），并同步升级 Android Gradle Plugin（如 8.5.2）。在 `gradle-wrapper.properties` 中设置 `distributionUrl=.../gradle-8.7-bin.zip`。 |\n| **Downloading gradle-8.7-bin.zip timeout** | 国内网络可将 `distributionUrl` 改为腾讯云镜像：`https://mirrors.cloud.tencent.com/gradle/gradle-8.7-bin.zip`；并把 `networkTimeout=10000` 改为 `60000`。 |\n| **NoClassDefFoundError: org/gradle/wrapper/IDownload** | 工程里的 `gradle-wrapper.jar` 与 Gradle 版本不一致（如仍为 8.2 的 jar 却用 8.7 的 distribution）。需替换为与 8.7 对应的 [官方 gradle-wrapper.jar](https://raw.githubusercontent.com/gradle/gradle/v8.7.0/gradle/wrapper/gradle-wrapper.jar)，校验 SHA-256 见 [Gradle release-checksums](https://gradle.org/release-checksums/)。 |\n| **无法定位 Java Runtime** | 终端/IDE 需能找到 JDK。macOS 下可把 Android Studio 自带 JDK 写入 `~/.zshrc`：`export JAVA_HOME=\"/Applications/Android Studio.app/Contents/jbr/Contents/Home\"` 与 `export PATH=\"$JAVA_HOME/bin:$PATH\"`。 |\n\nFile v1.0.1:references/location.md\n\n# 显示定位\n\n## 坐标系说明\n\n- 定位 SDK 支持国内输出：国测局坐标、百度墨卡托、百度经纬度；海外仅 WGS84。定位 SDK 默认输出 GCJ02，地图 SDK 默认 BD09LL；混用时需统一，见 [coordinate.md](coordinate.md)。\n\n## 前置条件\n\n- 开发包需包含定位能力（下载 SDK 时勾选基本定位）。\n- AndroidManifest：声明定位相关权限；在 `<application>` 内声明定位 Service 组件。\n\n## 开启定位图层与传数据\n\n1. 开启：`mBaiduMap.setMyLocationEnabled(true)`。\n2. 继承 `BDAbstractLocationListener`，在 `onReceiveLocation(BDLocation location)` 中构造 `MyLocationData` 并传给地图：\n   - `MyLocationData.Builder().accuracy(radius).direction(direction).latitude(lat).longitude(lng).build()`\n   - `mBaiduMap.setMyLocationData(locData)`。\n3. 使用 `LocationClient`：`LocationClient option = new LocationClient(context)`，`LocationClientOption` 设置 `setOpenGps`、`setCoorType(\"bd09ll\")`、`setScanSpan` 等，`setLocOption(option)`，`registerLocationListener(myLocationListener)`，`start()`。\n4. 生命周期：在 `onDestroy` 中 `mLocationClient.stop()`、`mBaiduMap.setMyLocationEnabled(false)`，再执行 MapView 的 `onDestroy()`。\n\n## MyLocationConfiguration（自定义样式）\n\n构造：`MyLocationConfiguration(LocationMode mode, boolean enableDirection, BitmapDescriptor customMarker, int accuracyCircleFillColor, int accuracyCircleStrokeColor)`。\n\n- **定位模式**：`LocationMode.NORMAL`（普通）、`LocationMode.FOLLOWING`（跟随）、`LocationMode.COMPASS`（罗盘）。\n- **自定义定位图标**：`BitmapDescriptorFactory.fromResource(R.drawable.xxx)` 传入。\n- **精度圈**：填充色、边框色用 ARGB；精度圈大小由定位精度自动决定，不可手动设。\n- 设置：`mBaiduMap.setMyLocationConfiguration(config)`。\n\n## 自定义定位图标（v7.5.7+）\n\n- Builder 构造：`MyLocationConfiguration.Builder(LocationMode locationMode, boolean enableArrow)`，enableArrow 为 true 表示箭头模式，false 为整体模式。\n- 方法：`setCustomMarker(BitmapDescriptor)`、`setMarkerSize(float)`（0.2~3 倍）、`setArrow(BitmapDescriptor)`、`setArrowSize(float)`、`setAnimation(boolean)`（中心图呼吸动画，非箭头模式 false）、`setGifMarker(String gifPath)`（中心 gif）。设置后通过 `setMyLocationConfiguration` 生效。\n\n## 注意\n\n- 定位频次在 LocationClientOption 中设置；详见定位 SDK 文档。\n- 定位指针方向依赖陀螺仪，需自行处理，不在地图 SDK 范畴。\n\nFile v1.0.1:references/mapview.md\n\n# 地图容器与 BaiduMap\n\n## 配置与初始化\n\n- **AndroidManifest**：在 `<application>` 内配置 AK：`<meta-data android:name=\"com.baidu.lbsapi.API_KEY\" android:value=\"您的AK\"/>`。在 `<application>` 外声明权限（如网络、定位等）；自 Android 6.0 起部分权限需代码动态申请。\n- **初始化**：在自定义 Application 的 `onCreate` 中调用 `SDKInitializer.initialize(this)` 和 `SDKInitializer.setCoordType(CoordType.BD09LL)`（或 GCJ02）。隐私接口必须在 initialize 之前调用，见 [overview.md](overview.md)。\n\n## 布局与获取 BaiduMap\n\n- 布局中声明：`<com.baidu.mapapi.map.MapView android:id=\"@+id/bmapView\" ... />`。\n- 代码获取：`MapView mMapView = findViewById(R.id.bmapView);`，`BaiduMap mBaiduMap = mMapView.getMap();`。\n- 纯代码：`MapView mapView = new MapView(this);` 然后 `setContentView(mapView)`。也可用 `BaiduMapOptions` 构造带初始状态的 MapView：`new MapView(this, options)`。\n\n## MapView 生命周期（必须）\n\n在 Activity 中：\n- `onResume()` 内调用 `mMapView.onResume()`\n- `onPause()` 内调用 `mMapView.onPause()`\n- `onDestroy()` 内调用 `mMapView.onDestroy()`\n\n## BaiduMapOptions 可选状态\n\n| 状态 | 含义 |\n|------|------|\n| mapStatus | 地图状态 |\n| compassEnable | 是否开启指南针，默认开启 |\n| mapType | 地图模式，默认普通地图 |\n| rotateGesturesEnabled | 是否允许旋转手势 |\n| scrollGesturesEnabled | 是否允许拖拽 |\n| overlookingGesturesEnabled | 是否允许俯视手势 |\n| zoomControlsEnabled | 是否显示缩放按钮 |\n| zoomControlsPosition | 缩放控件位置 |\n| zoomGesturesEnabled | 是否允许缩放手势 |\n| scaleControlEnabled | 是否显示比例尺 |\n| scaleControlPosition | 比例尺位置 |\n| logoPosition | Logo 位置 |\n\n## 地图类型与图层\n\n- **地图类型**（`mBaiduMap.setMapType(...)`）：\n  - `BaiduMap.MAP_TYPE_NORMAL`：普通地图（含 3D）\n  - `BaiduMap.MAP_TYPE_SATELLITE`：卫星图\n  - `BaiduMap.MAP_TYPE_NONE`：空白地图（不下载瓦片，可叠瓦片或覆盖物）\n- **实时路况**：`mBaiduMap.setTrafficEnabled(true)`。V4.5.0+ 可自定义路况颜色：`setCustomTrafficColor(严重拥堵, 拥堵, 缓行, 畅通)`，颜色格式 `#AARRGGBB`，不需显示的可将 AA 设为 00。\n- **百度城市热力图**：`mBaiduMap.setBaiduHeatMapEnabled(true)`；仅 11–20 级可显示。\n\n## 显示层级与比例尺\n\n- 缩放等级：2D 地图 4–21，3D 地图 19–21，卫星 4–20，路况/热力 11–21，室内 17–22。自 v5.0.0 起由 3–21 改为 4–21。\n- 设置缩放：`MapStatus.Builder builder = new MapStatus.Builder(); builder.zoom(18.0f); mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));`\n\n## 常用地图容器\n\n- **GLSurfaceView 系**：MapView、MapFragment、SupportMapFragment。\n- **TextureView 系**：TextureMapView、TextureMapFragment、TextureSupportMapFragment。与其它 GLSurfaceView（如相机）叠加或放在 ScrollView 时建议用 Texture 系，避免穿透、黑屏。需 Android 4.4+ 且开启硬件加速。\n- SupportMapFragment 使用：`SupportMapFragment.newInstance(mapOptions)`，再通过 FragmentTransaction 添加或替换到容器。\n\n## 多实例\n\n同一页面可放多个 MapView/SupportMapFragment，分别操作互不干扰。每个通过 `getBaiduMap()`/`getMapView()` 获取控制器与视图，分别设置 `MapStatusUpdate`、`setLogoPosition` 等。\n\n## 方法交互（BaiduMap）\n\n- **缩放**：`MapStatusUpdateFactory.zoomTo(level)`、`zoomIn()`、`zoomOut()`、`zoomBy(delta)`；`setMapStatus()` 为跳变，`animateMapStatus()` 为动画。级别超出范围时按最大/最小级别显示。\n- **操作区内边距**：`mBaiduMap.setViewPadding(left, top, right, bottom)`；地图加载完成后生效，可通过 `OnMapLoadedCallback.onMapLoaded()` 监听。不得遮挡百度 Logo 与版权。布局模式、面板高度、与 fitBounds 区分见 [ui-standards.md](ui-standards.md)。\n- **显示范围**：`MapStatusUpdateFactory.newLatLngBounds(bounds)` 或 `newLatLngBounds(bounds, width, height)`，bounds 由 `LatLngBounds.Builder().include(...).include(...).build()` 构造。\n- **中心点**：`MapStatusUpdateFactory.newLatLng(latLng)`。\n- **底图 POI**：`mBaiduMap.showMapPoi(false)` 可隐藏底图标注仅留道路。POI 标签按类型控制：`setPoiTagEnable(PoiTagType, boolean)`、`getPoiTagEnable(PoiTagType)`；PoiTagType 含 All、Epidemic、Travel、Shop 等。\n- **空白地图背景色**：仅当 `setMapType(MAP_TYPE_NONE)` 时生效，`mBaiduMap.setMapBackgroundColor(Color.argb(...))`。\n\nFile v1.0.1:references/marker.md\n\n# 点标记（Marker）\n\n## 添加 Marker\n\n- `LatLng point = new LatLng(lat, lng);`\n- `BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.xxx);`\n- `OverlayOptions option = new MarkerOptions().position(point).icon(bitmap);`\n- `mBaiduMap.addOverlay(option);` 返回 Overlay，可强转为 Marker。\n\n## MarkerOptions 常用属性\n\n| 名称 | 说明 |\n|------|------|\n| icon | 图标 BitmapDescriptor |\n| animateType | 动画类型：MarkerAnimateType.none / drop / grow / jump |\n| alpha | 透明度 |\n| position | 位置 LatLng |\n| perspective | 是否近大远小，默认 true |\n| draggable | 是否可拖拽 |\n| flat | 是否平贴地图（俯视效果） |\n| anchor | 锚点比例 |\n| rotate | 旋转角度 |\n| title | 标题 |\n| visible | 是否可见 |\n| extraInfo | 额外信息 Bundle |\n\n示例：`.position(point).icon(bitmap).draggable(true).flat(true).alpha(0.5f)`。\n\n## 事件\n\n- **点击**：`mBaiduMap.setOnMarkerClickListener(BaiduMap.OnMarkerClickListener)`，`onMarkerClick(Marker marker)`，返回 true 表示消费事件。\n- **拖拽**：需在 MarkerOptions 中 `draggable(true)`；`setOnMarkerDragListener`，回调 `onMarkerDrag`、`onMarkerDragEnd`、`onMarkerDragStart`。\n\n## 底图标注\n\n- `mBaiduMap.showMapPoi(false)` 可隐藏底图 POI，仅显示道路。\n\n## Marker 碰撞策略（v7.5.0+）\n\n- 属性：`isJoinCollision`（是否参与碰撞）、`isForceDisplay`（参与后是否强制展示）、`priority`（碰撞优先级，默认整型最大）、`startLevel`/`endLevel`（最小/最大展示层级，室外默认 4–21，室内至 22）。\n- 使用：`MarkerOptions().position(...).icon(...).isJoinCollision(true).isForceDisplay(true).priority(9)`，再 `addOverlay` 即生效。\n\n## 3D Marker（v7.5.2+）\n\n- 带高度的 Marker：先设高度，用 `projection.geoPoint3toScreenLocation(LatLng, height)` 转成屏幕点，再用 `projection.fromScreenLocation(Point)` 转回经纬度，然后按普通 Marker 添加。\n\n## Marker 的 Title（v7.5.7+）\n\n- 通过 `TitleOptions`：titleBgColor、titleFrontColor、titleFrontSize、titleAnchorX/Y、titileOffsetX/Y、titleRotate。\n- `MarkerOptions.titleOptions(titleOptions)`。\n\n## Marker 碰撞 POI（v7.5.7+）\n\n- `MarkerOptions.poiCollided(true)` 使 Marker 及其 title 可与底图 POI 碰撞。\n\nFile v1.0.1:references/overlays.md\n\n# 折线与多边形覆盖物\n\n## 折线 PolylineOptions\n\n- 坐标列表：`List<LatLng> points`。\n- 常用属性：`color`、`width`、`points`、`colorsValues`（分段颜色）、`customTexture` / `customTextureList` + `textureIndex`（分段纹理）、`visible`、`extraInfo`。\n- 添加：`OverlayOptions o = new PolylineOptions().width(10).color(0xAAFF0000).points(points);`，`mBaiduMap.addOverlay(o);` 返回可强转为 Polyline。\n\n## 虚线\n\n- 构造时：`PolylineOptions().dottedLine(true)`；或对已添加的 Polyline：`((Polyline)mPolyline).setDottedLine(true)`。\n\n## 分段颜色\n\n- `PolylineOptions().points(points).colorsValues(List<Integer> colors)`，colors 与线段段数对应。\n\n## 分段纹理\n\n- 纹理宽高建议 2 的幂；设纹理后折线颜色不生效。`customTextureList(List<BitmapDescriptor>)`、`textureIndex(List<Integer>)`；建议配合 `dottedLine(true)`。\n\n## Polyline 点击\n\n- `mBaiduMap.setOnPolylineClickListener(BaiduMap.OnPolylineClickListener)`，`onPolylineClick(Polyline polyline)` 返回 boolean。\n\n## 大地曲线\n\n- `PolylineOptions().isGeodesic(true).points(pointList)`；经度跨 180° 时需设置 `lineDirectionCross180(PolylineOptions.LineDirectionCross180.FROM_WEST_TO_EAST)`。点数 2–10000，且不能含 null。\n\n## 渐变色\n\n- `PolylineOptions().isGradient(true).points(points).colorsValues(List<Integer> colorValue)`，colorValue 为每个点的颜色，按索引与点对应。\n\n## Polyline 发光（v7.5.7+）\n\n- `PolylineOptions.bloomType(LineBloomType)`（默认不发光）、`bloomWidth(int)`、`bloomAlpha(int)`、`setBloomGradientASpeed(float)`、`setBloomBlurTimes(int)` 等。\n\n## 多边形\n\n- 使用 `PolygonOptions` 设置轮廓点、填充色、边框等，`mBaiduMap.addOverlay(polygonOptions)` 得到 Polygon。具体属性见类参考。\n\n## 路线 Overlay（开源）\n\n- 自 V3.6.0 起 Overlay 源码在 Demo 的 overlayutil 包：PoiOverlay、TransitRouteOverlay、WalkingRouteOverlay、BikingRouteOverlay、DrivingRouteOverlay、BusLineOverlay、MassTransitRouteOverlay 等，需自行拷贝到项目使用。\n\nFile v1.0.1:references/overview.md\n\n# 百度地图 Android SDK 集成与核心 API 摘要\n\nSDK 集成方式：推荐通过 **Gradle** 依赖（见 [gradle.md](gradle.md)）；AndroidManifest、混淆等见 [project-config.md](project-config.md)。\n\n## 使用准备与 AK\n\n1. 申请百度账号并完成开发者认证。\n2. 在控制台「应用管理 - 我的应用」创建应用，应用类型选 **Android SDK**，填写：\n   - 应用名称、**包名**（与 build.gradle 的 applicationId 一致）、**SHA1**（debug/release 可各填一个）。\n   - 勾选所需服务（地图、检索、路线等），未勾选则对应接口可能返回无权限。\n3. 将生成的 AK 配置到工程：AndroidManifest 的 `<application>` 内 `<meta-data android:name=\"com.baidu.lbsapi.API_KEY\" android:value=\"您的AK\"/>`，或代码中 `SDKInitializer.setApiKey(\"ak\")`（须在 `initialize` 之前）。包名与签名须与申请一致。鉴权结果由 SDK 通过广播回调（成功/失败/网络错误），失败时 Intent 带错误码与错误信息，排查与广播 Action 见 [project-config.md](project-config.md)。\n\n**SHA1**：调试版 `keytool -list -v -keystore ~/.android/debug.keystore`，默认口令 `android`。发布版用 release keystore。\n\n## 隐私合规（v7.5.0+）\n\n- 调用 SDK 任何接口前必须先调用隐私合规接口，且**必须在 `SDKInitializer.initialize` 之前**调用。\n- 定位 SDK：不同意则无法正常获取位置；地图 SDK：不同意则检索、路线等请求异常。\n- 统一接口：`SDKInitializer.setAgreePrivacy(Context context, boolean isEnable)`，context 必须为 Application Context；`isEnable` 为 true 表示用户同意隐私政策。\n- 推荐写法：在 Application 中先 `setAgreePrivacy`，再在 try-catch 中 `initialize`（可捕获 BaiduMapSDKException）。可按用户是否同意隐私分别设置；未同意时 `setAgreePrivacy(context, false)`，同意后再设为 true 并初始化。\n\n```java\n// 用户同意后，必须在 initialize 之前调用\nSDKInitializer.setAgreePrivacy(getApplicationContext(), true);\ntry {\n    SDKInitializer.initialize(this);\n} catch (BaiduMapSDKException e) {\n    // 初始化失败可记录日志\n}\nSDKInitializer.setCoordType(CoordType.BD09LL);\n```\n\n## Application 初始化\n\n```java\npublic class DemoApplication extends Application {\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SDKInitializer.setAgreePrivacy(getApplicationContext(), true); // 必须先于 initialize\n        try {\n            SDKInitializer.initialize(this);\n        } catch (BaiduMapSDKException e) { }\n        SDKInitializer.setCoordType(CoordType.BD09LL); // 或 CoordType.GCJ02，自 4.3.0\n    }\n}\n```\n\n## MapView 与 BaiduMap 生命周期\n\n- 布局中声明 `MapView`（或代码 `new MapView(this)`），Activity 中 `mMapView.getMap()` 得到 `BaiduMap`。\n- **必须在 Activity 中调用**：`onResume()` → `mMapView.onResume()`；`onPause()` → `mMapView.onPause()`；`onDestroy()` → `mMapView.onDestroy()`。\n\n## 核心类速查\n\n| 用途 | 类/接口 |\n|------|---------|\n| 初始化、坐标类型 | SDKInitializer、CoordType |\n| 地图控件与控制器 | MapView、BaiduMap、SupportMapFragment、TextureMapView |\n| 地图状态 | MapStatus、MapStatusUpdate、MapStatusUpdateFactory、MapStatus.Builder |\n| 经纬度 | LatLng |\n| 点标记 | Marker、MarkerOptions、BitmapDescriptor、BitmapDescriptorFactory |\n| 折线/多边形 | Polyline、PolylineOptions、Polygon、PolygonOptions |\n| POI 检索 | PoiSearch、PoiCitySearchOption、PoiNearbySearchOption、PoiBoundSearchOption、PoiDetailSearchOption、OnGetPoiSearchResultListener、PoiResult、PoiDetailSearchResult |\n| 地理编码 | GeoCoder、GeoCodeOption、ReverseGeoCodeOption、OnGetGeoCoderResultListener、GeoCodeResult、ReverseGeoCodeResult |\n| 路线规划 | RoutePlanSearch、DrivingRoutePlanOption、PlanNode、OnGetRoutePlanResultListener、DrivingRouteResult；步行/骑行/公交对应 Option/Result |\n| 路线 Overlay（开源） | DrivingRouteOverlay、WalkingRouteOverlay、BikingRouteOverlay、TransitRouteOverlay、PoiOverlay |\n| 步行/骑行导航 | WalkNavigateHelper、BikeNavigateHelper、WalkNaviLaunchParam、BikeNaviLaunchParam、诱导与 TTS 监听 |\n| 定位 | LocationClient、LocationClientOption、BDAbstractLocationListener、MyLocationData、MyLocationConfiguration、LocationMode |\n| 室内图 | BaiduMap.setOnBaseIndoorMapListener、switchBaseIndoorMapFloor |\n| 坐标转换 | CoordinateConverter、CoordType.GPS/COMMON/BD09MC 等 |\n\n## 检索与路线注意点\n\n- **监听先于请求**：POI 先 `setOnGetPoiSearchResultListener` 再 `searchInCity`/`searchNearby`/`searchInBound`/`searchPoiDetail`；路线先 `setOnGetRoutePlanResultListener` 再 `drivingSearch`/`walkingSearch` 等。\n- 使用完毕后 `destroy()` 释放 PoiSearch、RoutePlanSearch、GeoCoder 等实例。\n\n## 系统与包说明\n\n- 支持 Android 4.0+；支持 armeabi-v7a、arm64-v8a、x86、x86_64。\n- 自 V3.6.0 起覆盖物相关类开源（OverlayManager、PoiOverlay、TransitRouteOverlay、WalkingRouteOverlay、DrivingRouteOverlay、BusLineOverlay 等），可从 Demo 的 overlayutil 包获取。\n- 自 v4.5.0 支持 HTTPS，V5.3.2 起默认 HTTPS；Android P+ 禁止明文，检索建议用 HTTPS 或配置 network_security_config。\n\nFile v1.0.1:references/project-config.md\n\n# 工程配置\n\n**边界**：AndroidManifest、Gradle 混淆、百度 SDK 相关工程配置；Gradle 依赖见 [gradle.md](gradle.md)。\n\n## AndroidManifest\n\n### 配置 AK\n\n在 `<application>` 内添加 meta-data：\n\n```xml\n<meta-data\n    android:name=\"com.baidu.lbsapi.API_KEY\"\n    android:value=\"您的AK\" />\n```\n\n也可在代码中通过 `SDKInitializer.setApiKey(\"您的AK\")` 设置（**必须在 `initialize` 之前**调用，且优先于 Manifest 中的 meta-data）。\n\n**控制台配置**：在百度开放平台「应用管理 - 我的应用」创建应用，应用类型选 **Android SDK**；包名填写与 `build.gradle` 中 **applicationId** 完全一致；SHA1 填写调试/发布签名对应值（调试：`keytool -list -v -keystore ~/.android/debug.keystore`，默认口令 `android`）。勾选所需服务（地图、检索、路线规划等），未勾选则对应能力鉴权不通过。\n\n### AK 鉴权结果与排查\n\n- **鉴权方式**：SDK 在 `initialize` 后异步向服务端校验 AK，结果通过**广播**通知。\n- **广播 Action**（常量在 `SDKInitializer` 中）：\n  - `SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK`：AK 验证成功。\n  - `SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR`：AK 验证失败；Intent 附加 `SDK_BROADTCAST_INTENT_EXTRA_INFO_KEY_ERROR_CODE`（int）、`SDK_BROADTCAST_INTENT_EXTRA_INFO_KEY_ERROR_MESSAGE`（String）。\n  - `SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR`：网络错误，鉴权可能未完成。\n- **监听方式**：在 Activity 或 Application 中注册 `BroadcastReceiver`，过滤上述 Action；在 `onResume` 注册、`onPause` 注销，避免泄漏。收到 OK 可提示“鉴权成功”，收到 ERROR 可提示错误码与错误信息便于排查。\n- **常见失败原因**：包名与控制台不一致（必须与 applicationId 一致）；SHA1 与当前签名不一致（换 keystore 或打包方式后需更新控制台 SHA1）；控制台未勾选对应服务（如路线规划）；网络不可用。错误码含义见 [errorcode.md](errorcode.md)（如 101 AK 不存在、200 APP 不存在/AK 有误、240 服务被禁用）。\n\n### 权限\n\n在 manifest 中声明所需权限，例如：\n\n```xml\n<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n<uses-permission android:name=\"android.permission.INTERNET\" />\n<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />\n<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />\n```\n\n自 Android 6.0 起，危险权限需在运行时申请。\n\n### 主题与 Activity（避免闪退）\n\n使用 **AppCompatActivity** 时，`<application>` 的 `android:theme` 必须为 **Theme.AppCompat** 或其子类（如 `Theme.AppCompat.Light.NoActionBar`）。若使用系统主题 `@android:style/Theme.Material.Light.NoActionBar`，会在 `setContentView` 时抛出：\n\n`IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.`\n\n推荐在 AndroidManifest 中设置：\n\n```xml\nandroid:theme=\"@style/Theme.AppCompat.Light.NoActionBar\"\n```\n\n（由 `androidx.appcompat` 提供，无需在 styles.xml 中再定义。）\n\n### 定位 Service（使用定位时）\n\n使用地图定位或定位 SDK 时，在 `<application>` 内声明定位服务组件（具体组件名以当前 SDK 文档为准，例如）：\n\n```xml\n<service\n    android:name=\"com.baidu.location.f\"\n    android:enabled=\"true\"\n    android:process=\":remote\" />\n```\n\n请以官方「显示定位」或「Android Studio 配置」文档中的声明为准。\n\n## 混淆（ProGuard）\n\n发布包混淆时，百度地图相关类不得被混淆，否则易出现网络不可用等运行时异常。\n\n1. 在 app 的 `build.gradle` 的 `buildTypes.release`（若 debug 也混淆则一并配置）中启用混淆规则文件：\n\n```gradle\nbuildTypes {\n    release {\n        minifyEnabled true\n        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n    }\n}\n```\n\n2. 在 `proguard-rules.pro` 中添加：\n\n```\n-keep class com.baidu.** { *; }\n-keep class vi.com.** { *; }\n-keep class com.baidu.vi.** { *; }\n-dontwarn com.baidu.**\n```\n\n## 资源说明（V5.1.0+）\n\n自 V5.1.0 起，部分原 jar 内图片资源移至官方示例工程的 assets，若使用到路线/公交等 Overlay 图标，可从官网下载对应 Android 示例工程，将 `app/src/main/assets/` 下相关资源拷贝到本工程 assets。常见文件名包括：Icon_end.png、Icon_start.png、Icon_line_node.png、Icon_bus_station.png、Icon_subway_station.png、Icon_walk_route.png 等。步骑行导航一体化包解压后若带 assets 目录，也需拷贝到项目 assets。\n\n## 集成经验与常见问题\n\n以下为实际集成地图展示时的常见坑与建议，便于一次跑通。\n\n**排查顺序**（Agent 建议遵守）：先确认 **主题**（AppCompat）与 **compileSdk**（如 34）；再确认 **Application** 中隐私与 `initialize` 顺序、**AK/包名/SHA1** 与控制台一致；仍有闪退或地图不显示时查 **Logcat**（MapApplication、MainActivity、AndroidRuntime）及 **MapView 生命周期**（onResume/onPause/onDestroy 是否调用）。\n\n| 问题 | 原因 / 建议 |\n|------|--------------|\n| **闪退：You need to use a Theme.AppCompat theme** | 见上文「主题与 Activity」：必须使用 `@style/Theme.AppCompat.Light.NoActionBar` 等 AppCompat 主题，勿用 `@android:style/Theme.Material.*`。 |\n| **AAR 要求 compileSdk 34** | 依赖（如 `androidx.activity:activity:1.8.0`）可能要求 compileSdk ≥ 34。在 app 的 `build.gradle` 中设置 `compileSdk = 34`；targetSdk 可单独保留为 33。 |\n| **MapView 在部分设备/模拟器上闪退** | 若在 `onCreate` 中立即 `getMap()` 导致崩溃，可将 `getMap()` 延后到 **onResume()** 中首次调用，并做 null 判断与 try-catch，便于排查。 |\n| **Application 初始化失败** | Application 中建议用 `catch (Throwable)` 并打 Log（如 `Log.e(TAG, \"Baidu SDK init failed\", e)`），便于通过 Logcat 确认是否为 SDK 初始化或 AK/包名问题。 |\n| **鉴权失败、地图不显示、路线/检索无结果** | 先确认控制台包名=applicationId、SHA1 与当前签名一致、已勾选对应服务；监听鉴权广播（PERMISSION_CHECK_ERROR）获取错误码与错误信息，对照 [errorcode.md](errorcode.md)。 |\n\n## 后续\n\nApplication 内初始化与隐私接口见 [overview.md](overview.md)；显示地图与 MapView 生命周期见 [mapview.md](mapview.md)。Gradle 版本与国内镜像见 [gradle.md](gradle.md)。\n\nArchive v1.0.0: 17 files, 34921 bytes\n\nFiles: references/class-reference.md (4934b), references/coordinate.md (1733b), references/errorcode.md (1660b), references/gradle.md (4754b), references/location.md (2574b), references/mapview.md (4649b), references/marker.md (2319b), references/overlays.md (2110b), references/overview.md (5331b), references/project-config.md (6608b), references/reference.md (5559b), references/route.md (4475b), references/search.md (3735b), references/tools.md (3596b), references/ui-standards.md (7893b), SKILL.md (5526b), _meta.json (140b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: baidu-map-android-sdk\ndescription: 百度地图 Android SDK 集成与开发规范。覆盖地图展示、MapView/BaiduMap 生命周期、定位、标注与覆盖物、POI 检索、路线规划、步骑行导航；输出符合隐私与 AK 配置的 Android 地图方案。在开发 Android 地图应用、集成百度地图 SDK、MapView、路线规划、POI、导航时使用。\ncompatibility: Android, Gradle, Android Studio\n---\n\n# 百度地图 Android SDK\n\n## 目标与边界\n\n- **目标**：在 Android 工程中正确集成百度地图 SDK，并给出符合隐私、AK、坐标系规范的实现方案。\n- **负责**：地图展示、MapView 生命周期、覆盖物、POI/路线/地理编码检索、步骑行导航等；以技能内 references 为准。\n- **不负责**：服务端逻辑、非百度 SDK、UI 视觉设计。\n\n## 使用时机\n\n满足其一即启用本技能：\n\n- 关键词：百度地图 Android、MapView、BaiduMap、AK、路线规划、POI 检索、步骑行导航、BD09、坐标类型\n- 需求类型：地图展示、定位、标注与覆盖物、POI/地点检索、路线规划与画线、步行/骑行实时导航、地理编码\n\n**按需加载**：先根据需求在 [reference.md](references/reference.md) 中选定文档，再引用对应 references 内容；需求含糊时先向用户澄清**再给方案**。\n\n## 必须遵守的规则\n\n1. **隐私与初始化（v7.5.0+）**\n   - 调用 SDK 任何接口前必须先调用隐私合规接口，且**必须在 `SDKInitializer.initialize` 之前**调用。见 [overview.md](references/overview.md) 隐私合规小节。\n   - Application 中：`SDKInitializer.initialize(this)`；自 4.3.0 起可用 `SDKInitializer.setCoordType(CoordType.BD09LL)` 或 `CoordType.GCJ02`。\n\n2. **AK 与配置**\n   - 使用前需在控制台申请 Android SDK 密钥（AK），应用类型选「Android SDK」，填写包名、SHA1。AK 配置到 AndroidManifest 或 `SDKInitializer.setApiKey`；包名与签名须与申请一致。见 [overview.md](references/overview.md)。\n\n3. **MapView 生命周期**\n   - Activity 的 `onResume`/`onPause`/`onDestroy` 中必须分别调用 `mMapView.onResume()`、`mMapView.onPause()`、`mMapView.onDestroy()`。见 [mapview.md](references/mapview.md)。\n\n4. **坐标系**\n   - 国内默认 BD09LL；可与 GCJ02 通过 `SDKInitializer.setCoordType` 统一。与定位混用时与定位 SDK 坐标类型一致；转换见 [coordinate.md](references/coordinate.md)。\n\n5. **检索与路线**\n   - **监听先于请求**：先 `setOnGetPoiSearchResultListener` 再 `searchNearby` 等；先 `setOnGetRoutePlanResultListener` 再 `drivingSearch` 等，否则可能拿不到回调。用完后 `destroy()` 释放实例。\n\n6. **版本与 API 以工程为准**\n   - 用户已集成 SDK 时，以其实机/工程内版本为准。若某类或方法**不存在**（编译报错或依赖中无此符号），**提示用户将对应依赖更新到兼容版本**后再重试，勿强行写不存在的 API。\n\n7. **步骑行：按需求区分**\n   - **路线规划（算路+画线）**：RoutePlanSearch（驾车/步行/骑行/公交），得到路线后自绘折线或使用开源 Overlay。见 [route.md](references/route.md)。\n   - **步骑行实时导航**：步行/骑行导航引擎、诱导、TTS、偏航纠偏等，类见 [overview.md](references/overview.md) 与 [class-reference.md](references/class-reference.md)。\n   - 二者是**不同服务**：仅需画线用 route；需实时诱导/TTS 用步骑行导航。给出方案前先按开发者需求选对文档。\n\n## 输出规范（可评估）\n\n- **可落地**：含具体类名、方法、调用顺序与必要配置（AndroidManifest、Application、AK、隐私）。\n- **可验证**：隐私与 AK 明确；检索/路线监听顺序正确；若涉及定位/鉴权失败，方案可指向 [location.md](references/location.md) 或 [project-config.md](references/project-config.md) 的排查项。\n- **可组合**：按 [reference.md](references/reference.md) 选文档与常见组合。无特殊要求时界面与交互遵循 [ui-standards.md](references/ui-standards.md)。\n\n方案结构：需求 → 对应文档 → 配置与依赖 → 关键 API → 示例片段 → 注意事项。\n\n## 参考索引\n\n- 按需求选文档与常见组合：[reference.md](references/reference.md)\n- Gradle 集成（依赖、冲突、NDK、环境与国内镜像）：[gradle.md](references/gradle.md)\n- AndroidManifest、主题、混淆、集成经验与常见问题：[project-config.md](references/project-config.md)\n- 集成、AK、隐私、生命周期、核心类：[overview.md](references/overview.md)\n- 地图容器、类型、层级、方法交互：[mapview.md](references/mapview.md)\n- 显示定位、定位模式、自定义图标：[location.md](references/location.md)\n- 点标记、Marker 属性与事件：[marker.md](references/marker.md)\n- 折线、多边形、Polyline 属性：[overlays.md](references/overlays.md)\n- POI、地理编码、逆地理：[search.md](references/search.md)\n- 路线规划与 Overlay：[route.md](references/route.md)\n- 坐标转换与坐标系：[coordinate.md](references/coordinate.md)\n- 距离/面积、点与图形关系、调起地图、短地址分享：[tools.md](references/tools.md)\n- 错误码：[errorcode.md](references/errorcode.md)\n- 类与包速查：[class-reference.md](references/class-reference.md)\n- 检索/路线/选点/弹窗/Logo 等 UI 与交互约定：[ui-standards.md](references/ui-standards.md)\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn778b6bf766ym71fdvrc5yvg98319rv\",\n  \"slug\": \"baidu-map-android-sdk\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1773219125972\n}\n\nFile v1.0.0:references/class-reference.md\n\n# 类与包速查\n\n以下为百度地图 Android SDK 常用类与包，便于按能力查找。具体方法、参数以工程所集成的 SDK 版本为准。\n\n## 初始化与配置\n\n- `com.baidu.mapapi.SDKInitializer`：initialize、setApiKey、setCoordType、setAgreePrivacy、getCoordType\n- `com.baidu.mapapi.CoordType`：BD09LL、GCJ02\n\n## 地图容器与控制器\n\n- `com.baidu.mapapi.map.MapView`、`BaiduMap`、`getMap()`、onResume/onPause/onDestroy\n- `com.baidu.mapapi.map.SupportMapFragment`、`TextureMapView`、`TextureSupportMapFragment`\n- `com.baidu.mapapi.map.BaiduMapOptions`：mapType、compassEnable、zoomGesturesEnabled 等\n\n## 地图状态与视野\n\n- `MapStatus`、`MapStatus.Builder`、`MapStatusUpdate`、`MapStatusUpdateFactory`\n- `MapStatusUpdateFactory.zoomTo/zoomIn/zoomOut/zoomBy`、`newLatLng`、`newLatLngBounds`、`newMapStatus`\n- `BaiduMap`：setMapStatus、animateMapStatus、setMapType、setTrafficEnabled、setBaiduHeatMapEnabled、setViewPadding、showMapPoi、setPoiTagEnable、setMapBackgroundColor\n\n## 几何与覆盖物基础\n\n- `com.baidu.mapapi.model.LatLng`、`LatLngBounds`、`LatLngBounds.Builder`\n- `com.baidu.mapapi.map.BitmapDescriptor`、`BitmapDescriptorFactory`\n- `OverlayOptions`、`Overlay`、`BaiduMap.addOverlay`、`clear`\n- `Marker`、`MarkerOptions`：position、icon、draggable、flat、alpha、animateType、titleOptions、isJoinCollision、poiCollided 等\n- `Polyline`、`PolylineOptions`：points、width、color、dottedLine、colorsValues、customTextureList、textureIndex、isGeodesic、isGradient、bloomType 等\n- `Polygon`、`PolygonOptions`\n\n## 事件监听\n\n- `BaiduMap.OnMarkerClickListener`、`OnMarkerDragListener`、`OnPolylineClickListener`、`OnMapLoadedCallback`\n\n## 定位\n\n- `com.baidu.location.LocationClient`、`LocationClientOption`、`BDAbstractLocationListener`、`BDLocation`\n- `com.baidu.mapapi.map.MyLocationData`、`MyLocationConfiguration`、`LocationMode`（NORMAL、FOLLOWING、COMPASS）\n- `BaiduMap`：setMyLocationEnabled、setMyLocationData、setMyLocationConfiguration\n\n## 检索\n\n- `com.baidu.mapapi.search.poi.PoiSearch`、`PoiSearch.newInstance()`、setOnGetPoiSearchResultListener、searchInCity、searchNearby、searchInBound、searchPoiDetail、destroy\n- `PoiCitySearchOption`、`PoiNearbySearchOption`、`PoiBoundSearchOption`、`PoiDetailSearchOption`\n- `OnGetPoiSearchResultListener`、`PoiResult`、`PoiDetailSearchResult`、`PoiInfo`\n- `com.baidu.mapapi.search.geocode.GeoCoder`、`GeoCodeOption`、`ReverseGeoCodeOption`、`OnGetGeoCoderResultListener`、`GeoCodeResult`、`ReverseGeoCodeResult`\n\n## 路线规划\n\n- `com.baidu.mapapi.search.route.RoutePlanSearch`、`RoutePlanSearch.newInstance()`、setOnGetRoutePlanResultListener、drivingSearch、walkingSearch、ridingSearch、transitSearch、destroy\n- `PlanNode`、`PlanNode.withCityNameAndPlaceName`、`PlanNode.withLocation`\n- `DrivingRoutePlanOption`、`WalkingRoutePlanOption`、`BikingRoutePlanOption`、`TransitRoutePlanOption`\n- `OnGetRoutePlanResultListener`、`DrivingRouteResult`、`WalkingRouteResult`、`BikingRouteResult`、`TransitRouteResult`、`getRouteLines()`\n- 开源 Overlay：DrivingRouteOverlay、WalkingRouteOverlay、BikingRouteOverlay、TransitRouteOverlay、PoiOverlay（overlayutil 包）\n\n## 步骑行导航（实时诱导）\n\n- WalkNavigateHelper、BikeNavigateHelper、WalkNaviLaunchParam、BikeNaviLaunchParam、initNaviEngine、routePlanWithParams、onCreate（诱导 View）、startWalkNavi/startBikeNavi、setRouteGuidanceListener、setTTsPlayer、resume/pause/quit\n\n## 坐标转换\n\n- `com.baidu.mapapi.utils.CoordinateConverter`、`CoordType.GPS`、`COMMON`、`BD09MC` 等、`from()`、`coord()`、`convert()`\n\n## 室内图\n\n- `BaiduMap.setOnBaseIndoorMapListener`、`switchBaseIndoorMapFloor`、MapBaseIndoorMapInfo、SwitchFloorError\n\n## 投影与 3D Marker\n\n- `BaiduMap.getProjection()`、`projection.geoPoint3toScreenLocation(LatLng, height)`、`fromScreenLocation(Point)`\n\n## 工具（BaiduMapSDK_Util）\n\n- **距离与面积**：`DistanceUtil.getDistance(LatLng, LatLng)` 返回米；`AreaUtil.calculateArea(LatLng northeast, LatLng southwest)` 返回平方米。\n- **点与图形**：`SpatialRelationUtil.isCircleContainsPoint(center, radius, point)`、`isPolygonContainsPoint(points, pt)`、`getNearestPointFromLine(points, pt)`。\n- **调起百度地图**：`BaiduMapRoutePlan`（RouteParaOption、openBaiduMapTransitRoute 等）、`BaiduMapNavigation`（NaviParaOption、openBaiduMapWalkNavi 等）、`BaiduMapPoiSearch`（PoiParaOption、openBaiduMapPoiNearbySearch、openBaiduMapPoiDetialsPage、openBaiduMapPanoShow），调起后调用对应 `finish(context)`。\n- **短地址分享**：`ShareUrlSearch`、OnGetShareUrlResultListener、PoiDetailShareURLOption、LocationShareURLOption、RouteShareURLOption、requestPoiDetailShareUrl/requestLocationShareUrl/requestRouteShareUrl，ShareUrlResult.getUrl()，destroy()。\n\nFile v1.0.0:references/coordinate.md\n\n# 坐标转换与坐标系\n\n## 坐标系类型\n\n- **WGS84**：GPS 常用大地坐标系。\n- **GCJ02**：国测局坐标系，由 WGS84 加密。\n- **BD09**：百度坐标系，在 GCJ02 上再次加密。BD09LL 为百度经纬度，BD09MC 为百度墨卡托米制。\n- 国内（含港澳台）：地图 SDK 默认输入输出 BD09LL；可全局声明为 GCJ02，则全应用输入/输出为 GCJ02。海外统一 WGS84。\n- 定位 SDK 默认输出 GCJ02；与地图混用时需统一，通常地图设为 BD09LL 且定位设置 `setCoorType(\"bd09ll\")`，或地图设为 GCJ02。\n\n## 全局坐标类型（自 4.3.0）\n\n- `SDKInitializer.setCoordType(CoordType.BD09LL);` 或 `CoordType.GCJ02;` 声明全局类型。\n- `SDKInitializer.getCoordType();` 获取当前类型。\n- 自动转换仅适用于国内 GCJ02 输入；海外用 WGS84 无需转换。\n\n## 通用坐标转换（CoordinateConverter）\n\n- 将 WGS84/GCJ02 等转为 BD09LL（或当前声明的类型），需使用 SDK 提供的 CoordinateConverter，勿用非官方算法。\n- 示例（其它坐标系 → 百度经纬度）：\n  - 高德/腾讯等（COMMON）：`CoordinateConverter().from(CoordType.COMMON).coord(sourceLatLng).convert();`\n  - GPS 设备原始坐标：`CoordinateConverter().from(CoordinateConverter.CoordType.GPS).coord(sourceLatLng).convert();`\n- BD09MC → BD09LL：`from(CoordType.BD09MC).coord(sourceLatLng).convert();`\n- 返回 `LatLng desLatLng = converter.convert();`\n\n## 注意事项\n\n- 国内非 BD09LL 坐标需先转为 BD09LL 再叠加到百度地图，否则会偏移。\n- 海外 POI 使用 WGS84，地图海外也为 WGS84，无需转换。同时使用国内外数据时，自动坐标转换方式不适用，需手动按场景转换。\n\nFile v1.0.0:references/errorcode.md\n\n# 错误码对照表\n\n检索、路线等接口返回结果中带 error/errorCode 时，可参考下表。更多可查官方错误码文档。\n\n| 状态码 | 含义 |\n|--------|------|\n| 0 | 正常 |\n| 1 | 服务器内部错误（超时或系统错误） |\n| 10 | 上传内容超过 8M |\n| 101 | AK 参数不存在 |\n| 102 | mcode 参数不存在（Mobile 类型必需 Mcode） |\n| 200 | APP 不存在，AK 有误 |\n| 201 | APP 被用户禁用 |\n| 202 | APP 被管理员删除 |\n| 203 | APP 类型错误（Server/Mobile/Browser 等） |\n| 210 | APP IP 校验失败 |\n| 211 | APP SN 校验失败 |\n| 220 | APP Referer 校验失败 |\n| 230 | APP Mcode 校验失败 |\n| 240 | APP 服务被禁用 |\n| 250 | 用户不存在 |\n| 251 | 用户被自己删除 |\n| 252 | 用户被管理员删除 |\n| 260 | 服务不存在 |\n| 261 | 服务被禁用 |\n| 301 | 永久配额超限 |\n| 302 | 天配额超限 |\n| 401 | 并发量超过约定并发配额 |\n| 402 | 并发超限且总并发也超总配额 |\n\n检索/路线结果判断：结果类（如 PoiResult、DrivingRouteResult）有 **result.error** 字段，类型为 **SearchResult.ERRORNO**（枚举）。成功：`result.error == SearchResult.ERRORNO.NO_ERROR`。\n\n### 路线规划常用 ERRORNO\n\n| 枚举值 | 含义 |\n|--------|------|\n| NO_ERROR | 成功 |\n| RESULT_NOT_FOUND | 未找到路线 |\n| AMBIGUOUS_ROURE_ADDR | 起终点或途经点地址歧义，可 result.getSuggestAddrInfo() |\n\n### POI 检索常用 ERRORNO\n\n| 枚举值 | 含义 |\n|--------|------|\n| NO_ERROR | 成功 |\n| RESULT_NOT_FOUND | 未找到 |\n| AMBIGUOUS_KEYWORD | 关键字在本市无、其他城市有，可 result.getSuggestCityList() |\n\nFile v1.0.0:references/gradle.md\n\n# Gradle 集成 SDK\n\nAndroid 推荐通过 Gradle 依赖集成百度地图 SDK（国内版）。Google 渠道等需使用一体化包时请从官网下载后按「本地依赖」方式集成。\n\n**版本**：以下以 7.6.x / 9.6.x 为例，实际以官网更新为准。不写版本号可改为 `+` 或具体版本号；API 以工程内依赖版本为准，类/方法不存在时提示更新依赖，见 [SKILL.md](../SKILL.md) 规则 6。\n\n## 1. 配置仓库\n\n在 **Project** 的 `build.gradle` 中配置 `repositories`，添加 mavenCentral：\n\n```gradle\nallprojects {\n    repositories {\n        mavenCentral()\n    }\n}\n```\n\n若项目已使用 `dependencyResolutionManagement`（Gradle 7+），在 `settings.gradle` 或对应块中为百度 SDK 提供 mavenCentral 即可。\n\n## 2. 主工程依赖（app/build.gradle）\n\n在 **app** 的 `build.gradle` 的 `dependencies` 中按需添加。常用组合示例：\n\n| SDK | 依赖 |\n|-----|------|\n| 地图组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Map:7.6.7'` |\n| 检索组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Search:7.6.7'` |\n| 工具组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Util:7.6.7'` |\n| 步骑行导航组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-BWNavi:7.6.7'` |\n| 基础定位组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Location:9.6.6'` |\n| 全量定位组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Location_All:9.6.6'` |\n| 驾车导航组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-Navi:7.6.7'` |\n| 驾车+步骑行导航 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-AllNavi:7.6.7'` |\n| TTS 组件 | `implementation 'com.baidu.lbsyun:NaviTts:3.2.13'` |\n| 全景组件 | `implementation 'com.baidu.lbsyun:BaiduMapSDK_Panorama:2.9.0'` |\n\n**仅地图+检索+工具**示例：\n\n```gradle\ndependencies {\n    implementation 'com.baidu.lbsyun:BaiduMapSDK_Map:7.6.7'\n    implementation 'com.baidu.lbsyun:BaiduMapSDK_Search:7.6.7'\n    implementation 'com.baidu.lbsyun:BaiduMapSDK_Util:7.6.7'\n}\n```\n\n## 3. 组件冲突说明\n\n以下各组内**只能选其一**，不能同时引入：\n\n| 组 | 可选依赖 |\n|----|----------|\n| 定位 | 基础定位 `BaiduMapSDK_Location` **或** 全量定位 `BaiduMapSDK_Location_All` |\n| 地图/导航 | 地图 `BaiduMapSDK_Map`、步骑行 `BaiduMapSDK_Map-BWNavi`、驾车导航 `BaiduMapSDK_Map-Navi`、全部导航 `BaiduMapSDK_Map-AllNavi` 中选一（后三者已含地图） |\n\n按需求选：仅展示地图+检索用 Map+Search+Util；要步骑行实时导航用 Map-BWNavi；要驾车导航用 Map-Navi 或 Map-AllNavi。\n\n## 4. NDK 架构（abiFilters）\n\n在 app 的 `build.gradle` 的 `android.defaultConfig` 中配置 so 架构，按需保留：\n\n```gradle\nandroid {\n    defaultConfig {\n        ndk {\n            abiFilters \"armeabi-v7a\", \"arm64-v8a\", \"x86\", \"x86_64\"\n        }\n    }\n}\n```\n\n说明：官方文档曾包含 \"armeabi\"，目前新包多已不再提供，以实际 SDK 为准。\n\n## 5. 注意事项\n\n- **Gradle 仅支持国内版**：若需 Google 渠道或其它定制包，请到官网下载一体化包，采用「下载 SDK 本地依赖」方式（jar + so 放入 libs/jniLibs，并在 build.gradle 中配置 sourceSets 与 implementation fileTree）。\n- 集成完成后需配置 **AndroidManifest**（AK、权限、定位 Service）与 **混淆规则**，见 [project-config.md](project-config.md)；Application 初始化与隐私见 [overview.md](overview.md)。\n\n## 6. 环境与镜像（集成经验）\n\n以下为实际构建时的常见问题与处理，便于 Sync / 运行一次通过。\n\n| 问题 | 处理 |\n|------|------|\n| **Java 21 与 Gradle 8.2 不兼容** | 升级到 Gradle 8.7（或 8.5+），并同步升级 Android Gradle Plugin（如 8.5.2）。在 `gradle-wrapper.properties` 中设置 `distributionUrl=.../gradle-8.7-bin.zip`。 |\n| **Downloading gradle-8.7-bin.zip timeout** | 国内网络可将 `distributionUrl` 改为腾讯云镜像：`https://mirrors.cloud.tencent.com/gradle/gradle-8.7-bin.zip`；并把 `networkTimeout=10000` 改为 `60000`。 |\n| **NoClassDefFoundError: org/gradle/wrapper/IDownload** | 工程里的 `gradle-wrapper.jar` 与 Gradle 版本不一致（如仍为 8.2 的 jar 却用 8.7 的 distribution）。需替换为与 8.7 对应的 [官方 gradle-wrapper.jar](https://raw.githubusercontent.com/gradle/gradle/v8.7.0/gradle/wrapper/gradle-wrapper.jar)，校验 SHA-256 见 [Gradle release-checksums](https://gradle.org/release-checksums/)。 |\n| **无法定位 Java Runtime** | 终端/IDE 需能找到 JDK。macOS 下可把 Android Studio 自带 JDK 写入 `~/.zshrc`：`export JAVA_HOME=\"/Applications/Android Studio.app/Contents/jbr/Contents/Home\"` 与 `export PATH=\"$JAVA_HOME/bin:$PATH\"`。 |\n\nFile v1.0.0:references/location.md\n\n# 显示定位\n\n## 坐标系说明\n\n- 定位 SDK 支持国内输出：国测局坐标、百度墨卡托、百度经纬度；海外仅 WGS84。定位 SDK 默认输出 GCJ02，地图 SDK 默认 BD09LL；混用时需统一，见 [coordinate.md](coordinate.md)。\n\n## 前置条件\n\n- 开发包需包含定位能力（下载 SDK 时勾选基本定位）。\n- AndroidManifest：声明定位相关权限；在 `<application>` 内声明定位 Service 组件。\n\n## 开启定位图层与传数据\n\n1. 开启：`mBaiduMap.setMyLocationEnabled(true)`。\n2. 继承 `BDAbstractLocationListener`，在 `onReceiveLocation(BDLocation location)` 中构造 `MyLocationData` 并传给地图：\n   - `MyLocationData.Builder().accuracy(radius).direction(direction).latitude(lat).longitude(lng).build()`\n   - `mBaiduMap.setMyLocationData(locData)`。\n3. 使用 `LocationClient`：`LocationClient option = new LocationClient(context)`，`LocationClientOption` 设置 `setOpenGps`、`setCoorType(\"bd09ll\")`、`setScanSpan` 等，`setLocOption(option)`，`registerLocationListener(myLocationListener)`，`start()`。\n4. 生命周期：在 `onDestroy` 中 `mLocationClient.stop()`、`mBaiduMap.setMyLocationEnabled(false)`，再执行 MapView 的 `onDestroy()`。\n\n## MyLocationConfiguration（自定义样式）\n\n构造：`MyLocationConfiguration(LocationMode mode, boolean enableDirection, BitmapDescriptor customMarker, int accuracyCircleFillColor, int accuracyCircleStrokeColor)`。\n\n- **定位模式**：`LocationMode.NORMAL`（普通）、`LocationMode.FOLLOWING`（跟随）、`LocationMode.COMPASS`（罗盘）。\n- **自定义定位图标**：`BitmapDescriptorFactory.fromResource(R.drawable.xxx)` 传入。\n- **精度圈**：填充色、边框色用 ARGB；精度圈大小由定位精度自动决定，不可手动设。\n- 设置：`mBaiduMap.setMyLocationConfiguration(config)`。\n\n## 自定义定位图标（v7.5.7+）\n\n- Builder 构造：`MyLocationConfiguration.Builder(LocationMode locationMode, boolean enableArrow)`，enableArrow 为 true 表示箭头模式，false 为整体模式。\n- 方法：`setCustomMarker(BitmapDescriptor)`、`setMarkerSize(float)`（0.2~3 倍）、`setArrow(BitmapDescriptor)`、`setArrowSize(float)`、`setAnimation(boolean)`（中心图呼吸动画，非箭头模式 false）、`setGifMarker(String gifPath)`（中心 gif）。设置后通过 `setMyLocationConfiguration` 生效。\n\n## 注意\n\n- 定位频次在 LocationClientOption 中设置；详见定位 SDK 文档。\n- 定位指针方向依赖陀螺仪，需自行处理，不在地图 SDK 范畴。\n\nFile v1.0.0:references/mapview.md\n\n# 地图容器与 BaiduMap\n\n## 配置与初始化\n\n- **AndroidManifest**：在 `<application>` 内配置 AK：`<meta-data android:name=\"com.baidu.lbsapi.API_KEY\" android:value=\"您的AK\"/>`。在 `<application>` 外声明权限（如网络、定位等）；自 Android 6.0 起部分权限需代码动态申请。\n- **初始化**：在自定义 Application 的 `onCreate` 中调用 `SDKInitializer.initialize(this)` 和 `SDKInitializer.setCoordType(CoordType.BD09LL)`（或 GCJ02）。隐私接口必须在 initialize 之前调用，见 [overview.md](overview.md)。\n\n## 布局与获取 BaiduMap\n\n- 布局中声明：`<com.baidu.mapapi.map.MapView android:id=\"@+id/bmapView\" ... />`。\n- 代码获取：`MapView mMapView = findViewById(R.id.bmapView);`，`BaiduMap mBaiduMap = mMapView.getMap();`。\n- 纯代码：`MapView mapView = new MapView(this);` 然后 `setContentView(mapView)`。也可用 `BaiduMapOptions` 构造带初始状态的 MapView：`new MapView(this, options)`。\n\n## MapView 生命周期（必须）\n\n在 Activity 中：\n- `onResume()` 内调用 `mMapView.onResume()`\n- `onPause()` 内调用 `mMapView.onPause()`\n- `onDestroy()` 内调用 `mMapView.onDestroy()`\n\n## BaiduMapOptions 可选状态\n\n| 状态 | 含义 |\n|------|------|\n| mapStatus | 地图状态 |\n| compassEnable | 是否开启指南针，默认开启 |\n| mapType | 地图模式，默认普通地图 |\n| rotateGesturesEnabled | 是否允许旋转手势 |\n| scrollGesturesEnabled | 是否允许拖拽 |\n| overlookingGesturesEnabled | 是否允许俯视手势 |\n| zoomControlsEnabled | 是否显示缩放按钮 |\n| zoomControlsPosition | 缩放控件位置 |\n| zoomGesturesEnabled | 是否允许缩放手势 |\n| scaleControlEnabled | 是否显示比例尺 |\n| scaleControlPosition | 比例尺位置 |\n| logoPosition | Logo 位置 |\n\n## 地图类型与图层\n\n- **地图类型**（`mBaiduMap.setMapType(...)`）：\n  - `BaiduMap.MAP_TYPE_NORMAL`：普通地图（含 3D）\n  - `BaiduMap.MAP_TYPE_SATELLITE`：卫星图\n  - `BaiduMap.MAP_TYPE_NONE`：空白地图（不下载瓦片，可叠瓦片或覆盖物）\n- **实时路况**：`mBaiduMap.setTrafficEnabled(true)`。V4.5.0+ 可自定义路况颜色：`setCustomTrafficColor(严重拥堵, 拥堵, 缓行, 畅通)`，颜色格式 `#AARRGGBB`，不需显示的可将 AA 设为 00。\n- **百度城市热力图**：`mBaiduMap.setBaiduHeatMapEnabled(true)`；仅 11–20 级可显示。\n\n## 显示层级与比例尺\n\n- 缩放等级：2D 地图 4–21，3D 地图 19–21，卫星 4–20，路况/热力 11–21，室内 17–22。自 v5.0.0 起由 3–21 改为 4–21。\n- 设置缩放：`MapStatus.Builder builder = new MapStatus.Builder(); builder.zoom(18.0f); mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));`\n\n## 常用地图容器\n\n- **GLSurfaceView 系**：MapView、MapFragment、SupportMapFragment。\n- **TextureView 系**：TextureMapView、TextureMapFragment、TextureSupportMapFragment。与其它 GLSurfaceView（如相机）叠加或放在 ScrollView 时建议用 Texture 系，避免穿透、黑屏。需 Android 4.4+ 且开启硬件加速。\n- SupportMapFragment 使用：`SupportMapFragment.newInstance(mapOptions)`，再通过 FragmentTransaction 添加或替换到容器。\n\n## 多实例\n\n同一页面可放多个 MapView/SupportMapFragment，分别操作互不干扰。每个通过 `getBaiduMap()`/`getMapView()` 获取控制器与视图，分别设置 `MapStatusUpdate`、`setLogoPosition` 等。\n\n## 方法交互（BaiduMap）\n\n- **缩放**：`MapStatusUpdateFactory.zoomTo(level)`、`zoomIn()`、`zoomOut()`、`zoomBy(delta)`；`setMapStatus()` 为跳变，`animateMapStatus()` 为动画。级别超出范围时按最大/最小级别显示。\n- **操作区内边距**：`mBaiduMap.setViewPadding(left, top, right, bottom)`；地图加载完成后生效，可通过 `OnMapLoadedCallback.onMapLoaded()` 监听。不得遮挡百度 Logo 与版权。布局模式、面板高度、与 fitBounds 区分见 [ui-standards.md](ui-standards.md)。\n- **显示范围**：`MapStatusUpdateFactory.newLatLngBounds(bounds)` 或 `newLatLngBounds(bounds, width, height)`，bounds 由 `LatLngBounds.Builder().include(...).include(...).build()` 构造。\n- **中心点**：`MapStatusUpdateFactory.newLatLng(latLng)`。\n- **底图 POI**：`mBaiduMap.showMapPoi(false)` 可隐藏底图标注仅留道路。POI 标签按类型控制：`setPoiTagEnable(PoiTagType, boolean)`、`getPoiTagEnable(PoiTagType)`；PoiTagType 含 All、Epidemic、Travel、Shop 等。\n- **空白地图背景色**：仅当 `setMapType(MAP_TYPE_NONE)` 时生效，`mBaiduMap.setMapBackgroundColor(Color.argb(...))`。\n\nFile v1.0.0:references/marker.md\n\n# 点标记（Marker）\n\n## 添加 Marker\n\n- `LatLng point = new LatLng(lat, lng);`\n- `BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.xxx);`\n- `OverlayOptions option = new MarkerOptions().position(point).icon(bitmap);`\n- `mBaiduMap.addOverlay(option);` 返回 Overlay，可强转为 Marker。\n\n## MarkerOptions 常用属性\n\n| 名称 | 说明 |\n|------|------|\n| icon | 图标 BitmapDescriptor |\n| animateType | 动画类型：MarkerAnimateType.none / drop / grow / jump |\n| alpha | 透明度 |\n| position | 位置 LatLng |\n| perspective | 是否近大远小，默认 true |\n| draggable | 是否可拖拽 |\n| flat | 是否平贴地图（俯视效果） |\n| anchor | 锚点比例 |\n| rotate | 旋转角度 |\n| title | 标题 |\n| visible | 是否可见 |\n| extraInfo | 额外信息 Bundle |\n\n示例：`.position(point).icon(bitmap).draggable(true).flat(true).alpha(0.5f)`。\n\n## 事件\n\n- **点击**：`mBaiduMap.setOnMarkerClickListener(BaiduMap.OnMarkerClickListener)`，`onMarkerClick(Marker marker)`，返回 true 表示消费事件。\n- **拖拽**：需在 MarkerOptions 中 `draggable(true)`；`setOnMarkerDragListener`，回调 `onMarkerDrag`、`onMarkerDragEnd`、`onMarkerDragStart`。\n\n## 底图标注\n\n- `mBaiduMap.showMapPoi(false)` 可隐藏底图 POI，仅显示道路。\n\n## Marker 碰撞策略（v7.5.0+）\n\n- 属性：`isJoinCollision`（是否参与碰撞）、`isForceDisplay`（参与后是否强制展示）、`priority`（碰撞优先级，默认整型最大）、`startLevel`/`endLevel`（最小/最大展示层级，室外默认 4–21，室内至 22）。\n- 使用：`MarkerOptions().position(...).icon(...).isJoinCollision(true).isForceDisplay(true).priority(9)`，再 `addOverlay` 即生效。\n\n## 3D Marker（v7.5.2+）\n\n- 带高度的 Marker：先设高度，用 `projection.geoPoint3toScreenLocation(LatLng, height)` 转成屏幕点，再用 `projection.fromScreenLocation(Point)` 转回经纬度，然后按普通 Marker 添加。\n\n## Marker 的 Title（v7.5.7+）\n\n- 通过 `TitleOptions`：titleBgColor、titleFrontColor、titleFrontSize、titleAnchorX/Y、titileOffsetX/Y、titleRotate。\n- `MarkerOptions.titleOptions(titleOptions)`。\n\n## Marker 碰撞 POI（v7.5.7+）\n\n- `MarkerOptions.poiCollided(true)` 使 Marker 及其 title 可与底图 POI 碰撞。\n\nFile v1.0.0:references/overlays.md\n\n# 折线与多边形覆盖物\n\n## 折线 PolylineOptions\n\n- 坐标列表：`List<LatLng> points`。\n- 常用属性：`color`、`width`、`points`、`colorsValues`（分段颜色）、`customTexture` / `customTextureList` + `textureIndex`（分段纹理）、`visible`、`extraInfo`。\n- 添加：`OverlayOptions o = new PolylineOptions().width(10).color(0xAAFF0000).points(points);`，`mBaiduMap.addOverlay(o);` 返回可强转为 Polyline。\n\n## 虚线\n\n- 构造时：`PolylineOptions().dottedLine(true)`；或对已添加的 Polyline：`((Polyline)mPolyline).setDottedLine(true)`。\n\n## 分段颜色\n\n- `PolylineOptions().points(points).colorsValues(List<Integer> colors)`，colors 与线段段数对应。\n\n## 分段纹理\n\n- 纹理宽高建议 2 的幂；设纹理后折线颜色不生效。`customTextureList(List<BitmapDescriptor>)`、`textureIndex(List<Integer>)`；建议配合 `dottedLine(true)`。\n\n## Polyline 点击\n\n- `mBaiduMap.setOnPolylineClickListener(BaiduMap.OnPolylineClickListener)`，`onPolylineClick(Polyline polyline)` 返回 boolean。\n\n## 大地曲线\n\n- `PolylineOptions().isGeodesic(true).points(pointList)`；经度跨 180° 时需设置 `lineDirectionCross180(PolylineOptions.LineDirectionCross180.FROM_WEST_TO_EAST)`。点数 2–10000，且不能含 null。\n\n## 渐变色\n\n- `PolylineOptions().isGradient(true).points(points).colorsValues(List<Integer> colorValue)`，colorValue 为每个点的颜色，按索引与点对应。\n\n## Polyline 发光（v7.5.7+）\n\n- `PolylineOptions.bloomType(LineBloomType)`（默认不发光）、`bloomWidth(int)`、`bloomAlpha(int)`、`setBloomGradientASpeed(float)`、`setBloomBlurTimes(int)` 等。\n\n## 多边形\n\n- 使用 `PolygonOptions` 设置轮廓点、填充色、边框等，`mBaiduMap.addOverlay(polygonOptions)` 得到 Polygon。具体属性见类参考。\n\n## 路线 Overlay（开源）\n\n- 自 V3.6.0 起 Overlay 源码在 Demo 的 overlayutil 包：PoiOverlay、TransitRouteOverlay、WalkingRouteOverlay、BikingRouteOverlay、DrivingRouteOverlay、BusLineOverlay、MassTransitRouteOverlay 等，需自行拷贝到项目使用。\n\nFile v1.0.0:references/overview.md\n\n# 百度地图 Android SDK 集成与核心 API 摘要\n\nSDK 集成方式：推荐通过 **Gradle** 依赖（见 [gradle.md](gradle.md)）；AndroidManifest、混淆等见 [project-config.md](project-config.md)。\n\n## 使用准备与 AK\n\n1. 申请百度账号并完成开发者认证。\n2. 在控制台「应用管理 - 我的应用」创建应用，应用类型选 **Android SDK**，填写：\n   - 应用名称、**包名**（与 build.gradle 的 applicationId 一致）、**SHA1**（debug/release 可各填一个）。\n   - 勾选所需服务（地图、检索、路线等），未勾选则对应接口可能返回无权限。\n3. 将生成的 AK 配置到工程：AndroidManifest 的 `<application>` 内 `<meta-data android:name=\"com.baidu.lbsapi.API_KEY\" android:value=\"您的AK\"/>`，或代码中 `SDKInitializer.setApiKey(\"ak\")`（须在 `initialize` 之前）。包名与签名须与申请一致。鉴权结果由 SDK 通过广播回调（成功/失败/网络错误），失败时 Intent 带错误码与错误信息，排查与广播 Action 见 [project-config.md](project-config.md)。\n\n**SHA1**：调试版 `keytool -list -v -keystore ~/.android/debug.keystore`，默认口令 `android`。发布版用 release keystore。\n\n## 隐私合规（v7.5.0+）\n\n- 调用 SDK 任何接口前必须先调用隐私合规接口，且**必须在 `SDKInitializer.initialize` 之前**调用。\n- 定位 SDK：不同意则无法正常获取位置；地图 SDK：不同意则检索、路线等请求异常。\n- 统一接口：`SDKInitializer.setAgreePrivacy(Context context, boolean isEnable)`，context 必须为 Application Context；`isEnable` 为 true 表示用户同意隐私政策。\n- 推荐写法：在 Application 中先 `setAgreePrivacy`，再在 try-catch 中 `initialize`（可捕获 BaiduMapSDKException）。可按用户是否同意隐私分别设置；未同意时 `setAgreePrivacy(context, false)`，同意后再设为 true 并初始化。\n\n```java\n// 用户同意后，必须在 initialize 之前调用\nSDKInitializer.setAgreePrivacy(getApplicationContext(), true);\ntry {\n    SDKInitializer.initialize(this);\n} catch (BaiduMapSDKException e) {\n    // 初始化失败可记录日志\n}\nSDKInitializer.setCoordType(CoordType.BD09LL);\n```\n\n## Application 初始化\n\n```java\npublic class DemoApplication extends Application {\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SDKInitializer.setAgreePrivacy(getApplicationContext(), true); // 必须先于 initialize\n        try {\n            SDKInitializer.initialize(this);\n        } catch (BaiduMapSDKException e) { }\n        SDKInitializer.setCoordType(CoordType.BD09LL); // 或 CoordType.GCJ02，自 4.3.0\n    }\n}\n```\n\n## MapView 与 BaiduMap 生命周期\n\n- 布局中声明 `MapView`（或代码 `new MapView(this)`），Activity 中 `mMapView.getMap()` 得到 `BaiduMap`。\n- **必须在 Activity 中调用**：`onResume()` → `mMapView.onResume()`；`onPause()` → `mMapView.onPause()`；`onDestroy()` → `mMapView.onDestroy()`。\n\n## 核心类速查\n\n| 用途 | 类/接口 |\n|------|---------|\n| 初始化、坐标类型 | SDKInitializer、CoordType |\n| 地图控件与控制器 | MapView、BaiduMap、SupportMapFragment、TextureMapView |\n| 地图状态 | MapStatus、MapStatusUpdate、MapStatusUpdateFactory、MapStatus.Builder |\n| 经纬度 | LatLng |\n| 点标记 | Marker、MarkerOptions、BitmapDescriptor、BitmapDescriptorFactory |\n| 折线/多边形 | Polyline、PolylineOptions、Polygon、PolygonOptions |\n| POI 检索 | PoiSearch、PoiCitySearchOption、PoiNearbySearchOption、PoiBoundSearchOption、PoiDetailSearchOption、OnGetPoiSearchResultListener、PoiResult、PoiDetailSearchResult |\n| 地理编码 | GeoCoder、GeoCodeOption、ReverseGeoCodeOption、OnGetGeoCoderResultListener、GeoCodeResult、ReverseGeoCodeResult |\n| 路线规划 | RoutePlanSearch、DrivingRoutePlanOption、PlanNode、OnGetRoutePlanResultListener、DrivingRouteResult；步行/骑行/公交对应 Option/Result |\n| 路线 Overlay（开源） | DrivingRouteOverlay、WalkingRouteOverlay、BikingRouteOverlay、TransitRouteOverlay、PoiOverlay |\n| 步行/骑行导航 | WalkNavigateHelper、BikeNavigateHelper、WalkNaviLaunchParam、BikeNaviLaunchParam、诱导与 TTS 监听 |\n| 定位 | LocationClient、LocationClientOption、BDAbstractLocationListener、MyLocationData、MyLocationConfiguration、LocationMode |\n| 室内图 | BaiduMap.setOnBaseIndoorMapListener、switchBaseIndoorMapFloor |\n| 坐标转换 | CoordinateConverter、CoordType.GPS/COMMON/BD09MC 等 |\n\n## 检索与路线注意点\n\n- **监听先于请求**：POI 先 `setOnGetPoiSearchResultListener` 再 `searchInCity`/`searchNearby`/`searchInBound`/`searchPoiDetail`；路线先 `setOnGetRoutePlanResultListener` 再 `drivingSearch`/`walkingSearch` 等。\n- 使用完毕后 `destroy()` 释放 PoiSearch、RoutePlanSearch、GeoCoder 等实例。\n\n## 系统与包说明\n\n- 支持 Android 4.0+；支持 armeabi-v7a、arm64-v8a、x86、x86_64。\n- 自 V3.6.0 起覆盖物相关类开源（OverlayManager、PoiOverlay、TransitRouteOverlay、WalkingRouteOverlay、DrivingRouteOverlay、BusLineOverlay 等），可从 Demo 的 overlayutil 包获取。\n- 自 v4.5.0 支持 HTTPS，V5.3.2 起默认 HTTPS；Android P+ 禁止明文，检索建议用 HTTPS 或配置 network_security_config。\n\nFile v1.0.0:references/project-config.md\n\n# 工程配置\n\n**边界**：AndroidManifest、Gradle 混淆、百度 SDK 相关工程配置；Gradle 依赖见 [gradle.md](gradle.md)。\n\n## AndroidManifest\n\n### 配置 AK\n\n在 `<application>` 内添加 meta-data：\n\n```xml\n<meta-data\n    android:name=\"com.baidu.lbsapi.API_KEY\"\n    android:value=\"您的AK\" />\n```\n\n也可在代码中通过 `SDKInitializer.setApiKey(\"您的AK\")` 设置（**必须在 `initialize` 之前**调用，且优先于 Manifest 中的 meta-data）。\n\n**控制台配置**：在百度开放平台「应用管理 - 我的应用」创建应用，应用类型选 **Android SDK**；包名填写与 `build.gradle` 中 **applicationId** 完全一致；SHA1 填写调试/发布签名对应值（调试：`keytool -list -v -keystore ~/.android/debug.keystore`，默认口令 `android`）。勾选所需服务（地图、检索、路线规划等），未勾选则对应能力鉴权不通过。\n\n### AK 鉴权结果与排查\n\n- **鉴权方式**：SDK 在 `initialize` 后异步向服务端校验 AK，结果通过**广播**通知。\n- **广播 Action**（常量在 `SDKInitializer` 中）：\n  - `SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK`：AK 验证成功。\n  - `SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR`：AK 验证失败；Intent 附加 `SDK_BROADTCAST_INTENT_EXTRA_INFO_KEY_ERROR_CODE`（int）、`SDK_BROADTCAST_INTENT_EXTRA_INFO_KEY_ERROR_MESSAGE`（String）。\n  - `SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR`：网络错误，鉴权可能未完成。\n- **监听方式**：在 Activity 或 Application 中注册 `BroadcastReceiver`，过滤上述 Action；在 `onResume` 注册、`onPause` 注销，避免泄漏。收到 OK 可提示“鉴权成功”，收到 ERROR 可提示错误码与错误信息便于排查。\n- **常见失败原因**：包名与控制台不一致（必须与 applicationId 一致）；SHA1 与当前签名不一致（换 keystore 或打包方式后需更新控制台 SHA1）；控制台未勾选对应服务（如路线规划）；网络不可用。错误码含义见 [errorcode.md](errorcode.md)（如 101 AK 不存在、200 APP 不存在/AK 有误、240 服务被禁用）。\n\n### 权限\n\n在 manifest 中声明所需权限，例如：\n\n```xml\n<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n<uses-permission android:name=\"android.permission.INTERNET\" />\n<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />\n<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />\n```\n\n自 Android 6.0 起，危险权限需在运行时申请。\n\n### 主题与 Activity（避免闪退）\n\n使用 **AppCompatActivity** 时，`<application>` 的 `android:theme` 必须为 **Theme.AppCompat** 或其子类（如 `Theme.AppCompat.Light.NoActionBar`）。若使用系统主题 `@android:style/Theme.Material.Light.NoActionBar`，会在 `setContentView` 时抛出：\n\n`IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.`\n\n推荐在 AndroidManifest 中设置：\n\n```xml\nandroid:theme=\"@style/Theme.AppCompat.Light.NoActionBar\"\n```\n\n（由 `androidx.appcompat` 提供，无需在 styles.xml 中再定义。）\n\n### 定位 Service（使用定位时）\n\n使用地图定位或定位 SDK 时，在 `<application>` 内声明定位服务组件（具体组件名以当前 SDK 文档为准，例如）：\n\n```xml\n<service\n    android:name=\"com.baidu.location.f\"\n    android:enabled=\"true\"\n    android:process=\":remote\" />\n```\n\n请以官方「显示定位」或「Android Studio 配置」文档中的声明为准。\n\n## 混淆（ProGuard）\n\n发布包混淆时，百度地图相关类不得被混淆，否则易出现网络不可用等运行时异常。\n\n1. 在 app 的 `build.gradle` 的 `buildTypes.release`（若 debug 也混淆则一并配置）中启用混淆规则文件：\n\n```gradle\nbuildTypes {\n    release {\n        minifyEnabled true\n        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n    }\n}\n```\n\n2. 在 `proguard-rules.pro` 中添加：\n\n```\n-keep class com.baidu.** { *; }\n-keep class vi.com.** { *; }\n-keep class com.baidu.vi.** { *; }\n-dontwarn com.baidu.**\n```\n\n## 资源说明（V5.1.0+）\n\n自 V5.1.0 起，部分原 jar 内图片资源移至官方示例工程的 assets，若使用到路线/公交等 Overlay 图标，可从官网下载对应 Android 示例工程，将 `app/src/main/assets/` 下相关资源拷贝到本工程 assets。常见文件名包括：Icon_end.png、Icon_start.png、Icon_line_node.png、Icon_bus_station.png、Icon_subway_station.png、Icon_walk_route.png 等。步骑行导航一体化包解压后若带 assets 目录，也需拷贝到项目 assets。\n\n## 集成经验与常见问题\n\n以下为实际集成地图展示时的常见坑与建议，便于一次跑通。\n\n**排查顺序**（Agent 建议遵守）：先确认 **主题**（AppCompat）与 **compileSdk**（如 34）；再确认 **Application** 中隐私与 `initialize` 顺序、**AK/包名/SHA1** 与控制台一致；仍有闪退或地图不显示时查 **Logcat**（MapApplication、MainActivity、AndroidRuntime）及 **MapView 生命周期**（onResume/onPause/onDestroy 是否调用）。\n\n| 问题 | 原因 / 建议 |\n|------|--------------|\n| **闪退：You need to use a Theme.AppCompat theme** | 见上文「主题与 Activity」：必须使用 `@style/Theme.AppCompat.Light.NoActionBar` 等 AppCompat 主题，勿用 `@android:style/Theme.Material.*`。 |\n| **AAR 要求 compileSdk 34** | 依赖（如 `androidx.activity:activity:1.8.0`）可能要求 compileSdk ≥ 34。在 app 的 `build.gradle` 中设置 `compileSdk = 34`；targetSdk 可单独保留为 33。 |\n| **MapView 在部分设备/模拟器上闪退** | 若在 `onCreate` 中立即 `getMap()` 导致崩溃，可将 `getMap()` 延后到 **onResume()** 中首次调用，并做 null 判断与 try-catch，便于排查。 |\n| **Application 初始化失败** | Application 中建议用 `catch (Throwable)` 并打 Log（如 `Log.e(TAG, \"Baidu SDK init failed\", e)`），便于通过 Logcat 确认是否为 SDK 初始化或 AK/包名问题。 |\n| **鉴权失败、地图不显示、路线/检索无结果** | 先确认控制台包名=applicationId、SHA1 与当前签名一致、已勾选对应服务；监听鉴权广播（PERMISSION_CHECK_ERROR）获取错误码与错误信息，对照 [errorcode.md](errorcode.md)。 |\n\n## 后续\n\nApplication 内初始化与隐私接口见 [overview.md](overview.md)；显示地图与 MapView 生命周期见 [mapview.md](mapview.md)。Gradle 版本与国内镜像见 [gradle.md](gradle.md)。","readmeExcerpt":"Skill: Baidu Map Android SDK（百度地图官方安卓 SKills） Owner: baidu-maps Summary: 百度地图 Android SDK 集成与开发规范。覆盖地图展示、MapView/BaiduMap 生命周期、定位、标注与覆盖物、POI 检索、路线规划、步骑行导航；输出符合隐私与 AK 配置的 Android 地图方案。在开发 Android 地图应用、集成百度地图 SDK、MapView、路线规划、POI、导航... Tags: latest:1.0.3 Version history: v1.0.3 | 2026-06-01T03:41:59.477Z | user - Removed sample files: _meta.json, skill-card.md - No changes to core logic or documentation in SKILL.md v1.","codeSnippets":[],"executableExamples":[{"language":"gradle","snippet":"allprojects {\n    repositories {\n        mavenCentral()\n    }\n}"},{"language":"gradle","snippet":"dependencies {\n    implementation 'com.baidu.lbsyun:BaiduMapSDK_Map:7.6.7'\n    implementation 'com.baidu.lbsyun:BaiduMapSDK_Search:7.6.7'\n    implementation 'com.baidu.lbsyun:BaiduMapSDK_Util:7.6.7'\n}"},{"language":"gradle","snippet":"android {\n    defaultConfig {\n        ndk {\n            abiFilters \"armeabi-v7a\", \"arm64-v8a\", \"x86\", \"x86_64\"\n        }\n    }\n}"},{"language":"java","snippet":"// 用户同意后，必须在 initialize 之前调用\nSDKInitializer.setAgreePrivacy(getApplicationContext(), true);\ntry {\n    SDKInitializer.initialize(this);\n} catch (BaiduMapSDKException e) {\n    // 初始化失败可记录日志\n}\nSDKInitializer.setCoordType(CoordType.BD09LL);"},{"language":"java","snippet":"public class DemoApplication extends Application {\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SDKInitializer.setAgreePrivacy(getApplicationContext(), true); // 必须先于 initialize\n        try {\n            SDKInitializer.initialize(this);\n        } catch (BaiduMapSDKException e) { }\n        SDKInitializer.setCoordType(CoordType.BD09LL); // 或 CoordType.GCJ02，自 4.3.0\n    }\n}"},{"language":"xml","snippet":"<meta-data\n    android:name=\"com.baidu.lbsapi.API_KEY\"\n    android:value=\"您的AK\" />"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: baidu-map-android-sdk\ndescription: 百度地图 Android SDK 集成与开发规范。覆盖地图展示、MapView/BaiduMap 生命周期、定位、标注与覆盖物、POI 检索、路线规划、步骑行导航；输出符合隐私与 AK 配置的 Android 地图方案。在开发 Android 地图应用、集成百度地图 SDK、MapView、路线规划、POI、导航时使用。\ncompatibility: Android, Gradle, Android Studio\n---\n\n# 百度地图 Android SDK\n\n## 目标与边界\n\n- **目标**：在 Android 工程中正确集成百度地图 SDK，并给出符合隐私、AK、坐标系规范的实现方案。\n- **负责**：地图展示、MapView 生命周期、覆盖物、POI/路线/地理编码检索、步骑行导航等；以技能内 references 为准。\n- **不负责**：服务端逻辑、非百度 SDK、UI 视觉设计。\n\n## 使用时机\n\n满足其一即启用本技能：\n\n- 关键词：百度地图 Android、MapView、BaiduMap、AK、路线规划、POI 检索、步骑行导航、BD09、坐标类型\n- 需求类型：地图展示、定位、标注与覆盖物、POI/地点检索、路线规划与画线、步行/骑行实时导航、地理编码\n\n**按需加载**：先根据需求在 [reference.md](references/reference.md) 中选定文档，再引用对应 references 内容；需求含糊时先向用户澄清**再给方案**。\n\n## 必须遵守的规则\n\n1. **隐私与初始化（v7.5.0+）**\n   - 调用 SDK 任何接口前必须先调用隐私合规接口，且**必须在 `SDKInitializer.initialize` 之前**调用。见 [overview.md](references/overview.md) 隐私合规小节。\n   - Application 中：`SDKInitializer.initialize(this)`；自 4.3.0 起可用 `SDKInitializer.setCoordType(CoordType.BD09LL)` 或 `CoordType.GCJ02`。\n\n2. **AK 与配置**\n   - 使用前需在控制台申请 Android SDK 密钥（AK），应用类型选「Android SDK」，填写包名、SHA1。AK 配置到 AndroidManifest 或 `SDKInitializer.setApiKey`；包名与签名须与申请一致。见 [overview.md](references/overview.md)。\n\n3. **MapView 生命周期**\n   - Activity 的 `onResume`/`onPause`/`onDestroy` 中必须分别调用 `mMapView.onResume()`、`mMapView.onPause()`、`mMapView.onDestroy()`。见 [mapview.md](references/mapview.md)。\n\n4. **坐标系**\n   - 国内默认 BD09LL；可与 GCJ02 通过 `SDKInitializer.setCoordType` 统一。与定位混用时与定位 SDK 坐标类型一致；转换见 [coordinate.md](references/coordinate.md)。\n\n5. **检索与路线**\n   - **监听先于请求**：先 `setOnGetPoiSearchResultListener` 再 `searchNearby` 等；先 `setOnGetRoutePlanResultListener` 再 `drivingSearch` 等，否则可能拿不到回调。用完后 `destroy()` 释放实例。\n\n6. **版本与 API 以工程为准**\n   - 用户已集成 SDK 时，以其实机/工程内版本为准。若某类或方法**不存在**（编译报错或依赖中无此符号），**提示用户将对应依赖更新到兼容版本**后再重试，勿强行写不存在的 API。\n\n7. **步骑行：按需求区分**\n   - **路线规划（算路+画线）**：RoutePlanSearch（驾车/步行/骑行/公交），得到路线后自绘折线或使用开源 Overlay。见 [route.md](references/route.md)。\n   - **步骑行实时导航**：步行/骑行导航引擎、诱导、TTS、偏航纠偏等，类见 [overview.md](references/overview.md) 与 [class-reference.md](references/class-reference.md)。\n   - 二者是**不同服务**：仅需画线用 route；需实时诱导/TTS 用步骑行导航。给出方案前先按开发者需求选对文档。\n\n## 输出规范（可评估）\n\n- **可落地**：含具体类名、方法、调用顺序与必要配置（AndroidManifest、Application、AK、隐私）。\n- **可验证**：隐私与 AK 明确；检索/路线监听顺序正确；若涉及定位/鉴权失败，方案可指向 [location.md](references/location.md) 或 [project-config.md](references/project-config.md) 的排查项。\n- **可组合**：按 [reference.md](references/reference.md) 选文档与常见组合。无特殊要求时界面与交互遵循 [ui-standards.md](references/ui-standards.md)。\n\n方案结构：需求 → 对应文档 → 配置与依赖 → 关键 API → 示例片段 → 注意事项。\n\n## 参考索引\n\n- 按需求选文档与常见组合：[reference.md](references/reference.md)\n- Gradle 集成（依赖、冲突、NDK、环境与国内镜像）：[gradle.md](references/gradle.md)\n- AndroidManifest、主题、混淆、集成经验与常见问题：[project-config.md](references/project-config.md)\n- 集成、AK、隐私、生命周期、核心类：[overview.md](references/overview.md)\n- 地图容器、类型、层级、方法交互：[mapview.md](references/mapview.md)\n- 显示定位、定位模式、自定义图标：[location.md](references/location.md)\n- 点标记、Marker 属性与事件：[marker.md](references/marker.md)\n- 折线、多边形、Polyline 属性：[overlays.md](references/overlays."},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn778b6bf766ym71fdvrc5yvg98319rv\",\n  \"slug\": \"baidu-map-android-sdk\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1780285319477\n}"},{"path":"references/class-reference.md","content":"# 类与包速查\n\n以下为百度地图 Android SDK 常用类与包，便于按能力查找。具体方法、参数以工程所集成的 SDK 版本为准。\n\n## 初始化与配置\n\n- `com.baidu.mapapi.SDKInitializer`：initialize、setApiKey、setCoordType、setAgreePrivacy、getCoordType\n- `com.baidu.mapapi.CoordType`：BD09LL、GCJ02\n\n## 地图容器与控制器\n\n- `com.baidu.mapapi.map.MapView`、`BaiduMap`、`getMap()`、onResume/onPause/onDestroy\n- `com.baidu.mapapi.map.SupportMapFragment`、`TextureMapView`、`TextureSupportMapFragment`\n- `com.baidu.mapapi.map.BaiduMapOptions`：mapType、compassEnable、zoomGesturesEnabled 等\n\n## 地图状态与视野\n\n- `MapStatus`、`MapStatus.Builder`、`MapStatusUpdate`、`MapStatusUpdateFactory`\n- `MapStatusUpdateFactory.zoomTo/zoomIn/zoomOut/zoomBy`、`newLatLng`、`newLatLngBounds`、`newMapStatus`\n- `BaiduMap`：setMapStatus、animateMapStatus、setMapType、setTrafficEnabled、setBaiduHeatMapEnabled、setViewPadding、showMapPoi、setPoiTagEnable、setMapBackgroundColor\n\n## 几何与覆盖物基础\n\n- `com.baidu.mapapi.model.LatLng`、`LatLngBounds`、`LatLngBounds.Builder`\n- `com.baidu.mapapi.map.BitmapDescriptor`、`BitmapDescriptorFactory`\n- `OverlayOptions`、`Overlay`、`BaiduMap.addOverlay`、`clear`\n- `Marker`、`MarkerOptions`：position、icon、draggable、flat、alpha、animateType、titleOptions、isJoinCollision、poiCollided 等\n- `Polyline`、`PolylineOptions`：points、width、color、dottedLine、colorsValues、customTextureList、textureIndex、isGeodesic、isGradient、bloomType 等\n- `Polygon`、`PolygonOptions`\n\n## 事件监听\n\n- `BaiduMap.OnMarkerClickListener`、`OnMarkerDragListener`、`OnPolylineClickListener`、`OnMapLoadedCallback`\n\n## 定位\n\n- `com.baidu.location.LocationClient`、`LocationClientOption`、`BDAbstractLocationListener`、`BDLocation`\n- `com.baidu.mapapi.map.MyLocationData`、`MyLocationConfiguration`、`LocationMode`（NORMAL、FOLLOWING、COMPASS）\n- `BaiduMap`：setMyLocationEnabled、setMyLocationData、setMyLocationConfiguration\n\n## 检索\n\n- `com.baidu.mapapi.search.poi.PoiSearch`、`PoiSearch.newInstance()`、setOnGetPoiSearchResultListener、searchInCity、searchNearby、searchInBound、searchPoiDetail、destroy\n- `PoiCitySearchOption`、`PoiNearbySearchOption`、`PoiBoundSearchOption`、`PoiDetailSearchOption`\n- `OnGetPoiSearchResultListener`、`PoiResult`、`PoiDetailSearchResult`、`PoiInfo`\n- `com.baidu.mapapi.search.geocode.GeoCoder`、`GeoCodeOption`、`ReverseGeoCodeOption`、`OnGetGeoCoderResultListener`、`GeoCodeResult`、`ReverseGeoCodeResult`\n\n## 路线规划\n\n- `com.baidu.mapapi.search.route.RoutePlanSearch`、`RoutePlanSearch.newInstance()`、setOnGetRoutePlanResultListener、drivingSearch、walkingSearch、ridingSearch、transitSearch、destroy\n- `PlanNode`、`PlanNode.withCityNameAndPlaceName`、`PlanNode.withLocation`\n- `DrivingRoutePlanOption`、`WalkingRoutePlanOption`、`BikingRoutePlanOption`、`TransitRoutePlanOption`\n- `OnGetRoutePlanResultListener`、`DrivingRouteResult`、`WalkingRouteResult`、`BikingRouteResult`、`TransitRouteResult`、`getRouteLines()`\n- 开源 Overlay：DrivingRouteOverlay、WalkingRouteOverlay、BikingRouteOverlay、TransitRouteOverlay、PoiOverlay（overlayutil 包）\n\n## 步骑行导航（实时诱导）\n\n- WalkNavigateHelper、BikeNavigateHelper、WalkNaviLaunchParam、BikeNaviLaunchParam、initNaviEngine、routePlanWithParams、on"},{"path":"references/coordinate.md","content":"# 坐标转换与坐标系\n\n## 坐标系类型\n\n- **WGS84**：GPS 常用大地坐标系。\n- **GCJ02**：国测局坐标系，由 WGS84 加密。\n- **BD09**：百度坐标系，在 GCJ02 上再次加密。BD09LL 为百度经纬度，BD09MC 为百度墨卡托米制。\n- 国内（含港澳台）：地图 SDK 默认输入输出 BD09LL；可全局声明为 GCJ02，则全应用输入/输出为 GCJ02。海外统一 WGS84。\n- 定位 SDK 默认输出 GCJ02；与地图混用时需统一，通常地图设为 BD09LL 且定位设置 `setCoorType(\"bd09ll\")`，或地图设为 GCJ02。\n\n## 全局坐标类型（自 4.3.0）\n\n- `SDKInitializer.setCoordType(CoordType.BD09LL);` 或 `CoordType.GCJ02;` 声明全局类型。\n- `SDKInitializer.getCoordType();` 获取当前类型。\n- 自动转换仅适用于国内 GCJ02 输入；海外用 WGS84 无需转换。\n\n## 通用坐标转换（CoordinateConverter）\n\n- 将 WGS84/GCJ02 等转为 BD09LL（或当前声明的类型），需使用 SDK 提供的 CoordinateConverter，勿用非官方算法。\n- 示例（其它坐标系 → 百度经纬度）：\n  - 高德/腾讯等（COMMON）：`CoordinateConverter().from(CoordType.COMMON).coord(sourceLatLng).convert();`\n  - GPS 设备原始坐标：`CoordinateConverter().from(CoordinateConverter.CoordType.GPS).coord(sourceLatLng).convert();`\n- BD09MC → BD09LL：`from(CoordType.BD09MC).coord(sourceLatLng).convert();`\n- 返回 `LatLng desLatLng = converter.convert();`\n\n## 注意事项\n\n- 国内非 BD09LL 坐标需先转为 BD09LL 再叠加到百度地图，否则会偏移。\n- 海外 POI 使用 WGS84，地图海外也为 WGS84，无需转换。同时使用国内外数据时，自动坐标转换方式不适用，需手动按场景转换。"},{"path":"references/errorcode.md","content":"# 错误码对照表\n\n检索、路线等接口返回结果中带 error/errorCode 时，可参考下表。更多可查官方错误码文档。\n\n| 状态码 | 含义 |\n|--------|------|\n| 0 | 正常 |\n| 1 | 服务器内部错误（超时或系统错误） |\n| 10 | 上传内容超过 8M |\n| 101 | AK 参数不存在 |\n| 102 | mcode 参数不存在（Mobile 类型必需 Mcode） |\n| 200 | APP 不存在，AK 有误 |\n| 201 | APP 被用户禁用 |\n| 202 | APP 被管理员删除 |\n| 203 | APP 类型错误（Server/Mobile/Browser 等） |\n| 210 | APP IP 校验失败 |\n| 211 | APP SN 校验失败 |\n| 220 | APP Referer 校验失败 |\n| 230 | APP Mcode 校验失败 |\n| 240 | APP 服务被禁用 |\n| 250 | 用户不存在 |\n| 251 | 用户被自己删除 |\n| 252 | 用户被管理员删除 |\n| 260 | 服务不存在 |\n| 261 | 服务被禁用 |\n| 301 | 永久配额超限 |\n| 302 | 天配额超限 |\n| 401 | 并发量超过约定并发配额 |\n| 402 | 并发超限且总并发也超总配额 |\n\n检索/路线结果判断：结果类（如 PoiResult、DrivingRouteResult）有 **result.error** 字段，类型为 **SearchResult.ERRORNO**（枚举）。成功：`result.error == SearchResult.ERRORNO.NO_ERROR`。\n\n### 路线规划常用 ERRORNO\n\n| 枚举值 | 含义 |\n|--------|------|\n| NO_ERROR | 成功 |\n| RESULT_NOT_FOUND | 未找到路线 |\n| AMBIGUOUS_ROURE_ADDR | 起终点或途经点地址歧义，可 result.getSuggestAddrInfo() |\n\n### POI 检索常用 ERRORNO\n\n| 枚举值 | 含义 |\n|--------|------|\n| NO_ERROR | 成功 |\n| RESULT_NOT_FOUND | 未找到 |\n| AMBIGUOUS_KEYWORD | 关键字在本市无、其他城市有，可 result.getSuggestCityList() |"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"百度地图 Android SDK 集成与开发规范。覆盖地图展示、MapView/BaiduMap 生命周期、定位、标注与覆盖物、POI 检索、路线规划、步骑行导航；输出符合隐私与 AK 配置的 Android 地图方案。在开发 Android 地图应用、集成百度地图 SDK、MapView、路线规划、POI、导航... Skill: Baidu Map Android SDK（百度地图官方安卓 SKills） Owner: baidu-maps Summary: 百度地图 Android SDK 集成与开发规范。覆盖地图展示、MapView/BaiduMap 生命周期、定位、标注与覆盖物、POI 检索、路线规划、步骑行导航；输出符合隐私与 AK 配置的 Android 地图方案。在开发 Android 地图应用、集成百度地图 SDK、MapView、路线规划、POI、导航... Tags: latest:1.0.3 Version history: v1.0.3 | 2026-06-01T03:41:59.477Z | user - Removed sample files: _meta.json, skill-card.md - No changes to core logic or documentation in SKILL.md v1.","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":929,"uniquenessScore":56,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T13:51:31.286Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T13:51:31.286Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T15:50:57.345Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}