App 集成百度地圖 SDK,實現 POI 搜索(關鍵字/周邊/城市)與定位(GPS/網絡)功能,需可直接運行的參考代碼。
AndroidManifest.xml
MapView mMapView = findViewById(R.id.mapView);
BaiduMap mBaiduMap = mMapView.getMap();
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
mBaiduMap.setMyLocationEnabled(true); // 開啟定位圖層
LocationClient mLocClient = new LocationClient(getApplicationContext());
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
option.setCoorType("bd09ll"); // 百度經緯度
option.setScanSpan(1000); // 1秒定位一次
mLocClient.setLocOption(option);
mLocClient.registerLocationListener(new MyLocationListener());
mLocClient.start();
PoiSearch poiSearch = PoiSearch.newInstance();
poiSearch.setOnGetPoiSearchResultListener(new OnGetPoiSearchResultListener() {
@Override
public void onGetPoiResult(PoiResult result) {
// result.getAllPoi() 獲取列表,更新 UI/覆蓋物
}
@Override
public void onGetPoiDetailResult(PoiDetailResult result) { /* 單個詳情 */ }
});
// 城市內關鍵字搜索
poiSearch.searchInCity(new PoiCitySearchOption()
.city("北京")
.keyword("餐廳")
.pageNum(10));
// 周邊搜索
poiSearch.searchNearby(new PoiNearbySearchOption()
.location(new LatLng(lat, lng))
.keyword("加油站")
.radius(1000));
class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
MyLocationData data = new MyLocationData.Builder()
.accuracy(location.getRadius())
.direction(location.getDirection())
.latitude(location.getLatitude())
.longitude(location.getLongitude())
.build();
mBaiduMap.setMyLocationData(data);
// 首次定位移動地圖中心
if (isFirstLoc) {
MapStatusUpdate u = MapStatusUpdateFactory.newLatLngZoom(
new LatLng(location.getLatitude(), location.getLongitude()), 18);
mBaiduMap.animateMapStatus(u);
isFirstLoc = false;
}
}
}
CSDN 博主整理版(含完整項目結構):Android 百度地圖 POI 搜索定位完整 Demo
| 問題 | 解決 |
|---|---|
| AK 驗證失敗 | 包名/簽名與控制台不一致,Release/Debug 區分 |
| 定位失敗 | 檢查權限、GPS 開啟、模擬器模擬位置 |
| 地圖白屏 | so 库架構匹配(arm64-v8a/armeabi-v7a),jniLibs 放置正確 |
| POI 無結果 | 關鍵字編碼、城市名稱標準化、配額限制 |
直接下載官方 SDK 附帶的 Demo 項目,導入 Android Studio,配置 AK 即可運行,是最權威的參考代碼。