以百度api為基礎
複制
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
要定義的變量
private BaiduMap mBaiduMap;
private MapView mMapView;
private LocationClient mLocationClient;
private boolean isFirstIn = true;
初始化
mMapView= (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
各部分實作的功能
1.
//在使用SDK各元件之前初始化context資訊,傳入ApplicationContext
//注意該方法要再setContentView方法之前實作
SDKInitializer.initialize(getApplicationContext());
把地圖的生命周期和activity的生命周期綁定起來
@Override
protected void onStart() {
super.onStart();
mBaiduMap.setMyLocationEnabled(true);
if(!mLocationClient.isStarted())
mLocationClient.start();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity執行onResume時執行mMapView. onResume (),實作地圖生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity執行onPause時執行mMapView. onPause (),實作地圖生命周期管理
mMapView.onPause();
}
實作option點選轉換地圖模式
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
menu.add(, , , "普通地圖");
menu.add(, , , "衛星地圖");
menu.add(, , , "實時交通(off)");
return super.onCreateOptionsMenu(menu);
}
設定option的點選事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case :
//普通地圖
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
break;
case :
//衛星地圖
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
break;
case :
if(mBaiduMap.isTrafficEnabled()){
mBaiduMap.setTrafficEnabled(false);
item.setTitle("實時交通(off)");
}else{
mBaiduMap.setTrafficEnabled(true);
item.setTitle("實時交通(on)");
}
break;
}
return super.onOptionsItemSelected(item);
}
在地圖上添加辨別物
//定義Maker坐标點
LatLng point = new LatLng(, );
//建構Marker圖示
BitmapDescriptor bitmap = BitmapDescriptorFactory
.fromResource(R.drawable.ic_launcher);
//建構MarkerOption,用于在地圖上添加Marker
OverlayOptions option = new MarkerOptions()
.position(point)
.icon(bitmap);
//在地圖上添加Marker,并顯示
mBaiduMap.addOverlay(option);
設定gps定位
要用到的類
LocationClient
BDLocationListener
(1)
MyLocationListener myLocationListener = new MyLocationListener();
mLocationClient = new LocationClient(getApplicationContext()); //聲明LocationClient類
mLocationClient.registerLocationListener(myLocationListener); //注冊監聽函數
(2)利用LocationClientOption 設定定位的屬性
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy);//設定定位模式
option.setCoorType("bd09ll");//傳回的定位結果是百度經緯度,預設值gcj02
option.setScanSpan();//設定發起定位請求的間隔時間為5000ms
option.setIsNeedAddress(true);//傳回的定位結果包含位址資訊
option.setNeedDeviceDirect(true);//傳回的定位結果包含手機機頭的方向
mLocationClient.setLocOption(option);
(3)監聽器的實作
private class MyLocationListener implements BDLocationListener{
@Override
public void onReceiveLocation(BDLocation location) {
// TODO Auto-generated method stub
MyLocationData data = new MyLocationData.Builder()
//設定經緯度
.accuracy(location.getRadius())
.latitude(location.getLatitude())
.longitude(location.getLongitude())
.build();
mBaiduMap.setMyLocationData(data);
//判斷第一次進入,定位到目前所在位置
if(isFirstIn){
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
MapStatusUpdate msu =MapStatusUpdateFactory.newLatLng(latLng);
mBaiduMap.animateMapStatus(msu);
Toast.makeText(getApplicationContext(), location.getAddrStr(),).show();
isFirstIn = false;
}
}
}
所要加的權限
<!-- 這個權限用于進行網絡定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 這個權限用于通路GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于通路wifi網絡資訊,wifi資訊會用于進行網絡定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 擷取營運商資訊,用于支援提供營運商資訊相關的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 這個權限用于擷取wifi的擷取權限,wifi資訊會用來進行網絡定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 用于讀取手機目前的狀态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!-- 寫入擴充存儲,向擴充卡寫入資料,用于寫入離線定位資料-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 通路網絡,網絡定位需要上網-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡讀取權限,使用者寫入離線定位資料-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
<!--允許應用讀取低級别的系統日志檔案 -->
<uses-permission android:name="android.permission.READ_LOGS"></uses-permission>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_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.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
所要在application聲明的
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="OSzBVaOV08hT2o7yNBIq4NFS" />
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">
</service>