百度地圖開發平台:http://lbsyun.baidu.com/
這裡講述的是關于Android Studio工程配置方法:
在工程app/libs目錄下放入baidumapapi_vX_X_X.jar,在工程中引用
src/main/jniLibs下的so包,放在jniLibs下自動加載
代碼部分:
第一步:建立并配置工程(可根據官網進行配置);
第二步:在AndroidManifest中添加開發密鑰所需權限等資訊(1)在application中添加開發密鑰
<application>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="開發者 key" />
</application>
百度地圖定位service
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
2)添加所需權限
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<!-- 這個權限用于進行網絡定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 這個權限用于通路GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 用于通路wifi網絡資訊,wifi資訊會用于進行網絡定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 擷取營運商資訊,用于支援提供營運商資訊相關的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 用于讀取手機目前的狀态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 寫入擴充存儲,向擴充卡寫入資料,用于寫入離線定位資料 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 通路網絡,網絡定位需要上網 -->
<uses-permission android:name="android.permission.INTERNET" />
第三步,在布局xml檔案中添加地圖控件;
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
主要代碼部分:
定位圖檔:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 在使用 SDK 各組間之前初始化 context 資訊,傳入 ApplicationContext
SDKInitializer.initialize(this);
//自4.3.0起,百度地圖SDK所有接口均支援百度坐标和國測局坐标,用此方法設定您使用的坐标類型.
//包括BD09LL和GCJ02兩種坐标,預設是BD09LL坐标。
SDKInitializer.setCoordType(CoordType.BD09LL);
}
}
定位代碼部分:
public class LocationActivity extends AppCompatActivity {
private MapView mMapView;
private BaiduMap mBaiduMap;
// 定位相關
private LocationClient mLocClient;
private MyLocationListener myListener = new MyLocationListener();
boolean isFirstLoc = true; // 是否首次定位
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_location);
// 地圖初始化
mMapView = (MapView) findViewById(R.id.map_view);
mBaiduMap = mMapView.getMap();
//隐藏地圖上百度地圖logo圖示
//mMapView.removeViewAt(1);
// 隐藏地圖上比例尺
//mMapView.removeViewAt(2);
//隐藏地圖上縮放控件
//mMapView.showZoomControls(false);
// 開啟定位圖層
mBaiduMap.setMyLocationEnabled(true);
// 定位初始化
mLocClient = new LocationClient(this);
mLocClient.registerLocationListener(myListener);
LocationClientOption option = new LocationClientOption();
//可選,預設false,設定是否使用gps
option.setOpenGps(true);
//可選,預設gcj02,設定傳回的定位結果坐标系
option.setCoorType("bd09ll");
//可選,預設0,即僅定位一次,設定發起定位請求的間隔需要大于等于1000ms才是有效的
option.setScanSpan();
//可選,設定是否需要位址資訊,預設不需要
option.setIsNeedAddress(true);
mLocClient.setLocOption(option);
mLocClient.start();
}
/**
* 定位SDK監聽函數 異步擷取定位結果
*/
public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
// map view 銷毀後不在處理新接收的位置
if (location == null || mMapView == null) {
return;
}
if (isFirstLoc){
isFirstLoc = false;
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
//地圖狀态改變
MapStatus.Builder builder = new MapStatus.Builder();
builder.target(latLng).zoom(f); //target() 設定地圖中心點 zoom() 縮放值
//以動畫更新地圖狀态 300ms
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
//Marker标記
BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.icon_gcoding);
MarkerOptions markerOption = new MarkerOptions().position(latLng).icon(bitmap);
mBaiduMap.addOverlay(markerOption);
Toast.makeText(LocationActivity.this, location.getAddrStr(), Toast.LENGTH_SHORT).show();
}
}
}
@Override
protected void onPause() {
mMapView.onPause();
super.onPause();
}
@Override
protected void onResume() {
mMapView.onResume();
super.onResume();
}
@Override
protected void onDestroy() {
// 退出時銷毀定位
mLocClient.stop();
// 關閉定位圖層
mBaiduMap.setMyLocationEnabled(false);
mMapView.onDestroy();
mMapView = null;
super.onDestroy();
}
}
activity_location.xml布局檔案:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.baidu.mapapi.map.MapView
android:id="@+id/map_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
效果圖: