您好,登錄后才能下訂單哦!
對(duì)于初學(xué)者來(lái)說(shuō),首先得先注意,不同的jar版本,方法也不同,之前不知道,糾結(jié)了很久
xml布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.baidu.mapapi.map.MapView
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
menu布局
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/id_menu_map_common"
android:icon="@drawable/ic_launcher"
android:showAsAction="never"
android:title="普通地圖"/>
<item
android:id="@+id/id_menu_map_site"
android:icon="@drawable/ic_launcher"
android:showAsAction="never"
android:title="衛(wèi)星地圖"/>
<item
android:id="@+id/id_menu_map_myLoc"
android:icon="@drawable/ic_launcher"
android:showAsAction="never"
android:title="我的位置"/>
</menu>
<!-- android版本支持 -->
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true" />
<!-- 百度定位服務(wù) -->
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
<!-- 百度地圖權(quán)限 -->
<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" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
Activity方法實(shí)現(xiàn)
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfigeration;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.MyLocationConfigeration.LocationMode;
import com.baidu.mapapi.model.LatLng;
public class MyMapActivity extends Activity {
private MapView mMapView;
private BaiduMap baiduMap;
/** 定位 */
private LocationClient myLocation;
/** 定位監(jiān)聽器 */
public MyLocationListener myLocationListener;
/** 當(dāng)前緯度 */
private double mCurrentLatitude;
/** 當(dāng)前經(jīng)度 */
private double mCurrentLongitude;
/**
* 當(dāng)前定位的模式
*/
private LocationMode mCurrentMode = LocationMode.NORMAL;
/***
* 是否是第一次定位
*/
private volatile boolean isFristLocation = true;
private boolean flag = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 在使用SDK各組件之前初始化context信息,傳入ApplicationContext
// 注意該方法要再setContentView方法之前實(shí)現(xiàn)
requestWindowFeature(Window.FEATURE_NO_TITLE);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_map);
init();
initMyLocation();
}
/**
* 初始化方法
*/
private void init() {
mMapView = (MapView) findViewById(R.id.mapView);
baiduMap = mMapView.getMap();
if (flag) {
// 設(shè)置顯示的地圖模式為衛(wèi)星地圖
baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
} else {
// 設(shè)置顯示的地圖模式為普通模式
baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
}
MapStatusUpdate update = MapStatusUpdateFactory.zoomTo(15.0f);
baiduMap.setMapStatus(update);
}
/**
* 初始化定位相關(guān)代碼
*/
private void initMyLocation() {
// 定位初始化
myLocation = new LocationClient(this);
myLocationListener = new MyLocationListener();
myLocation.registerLocationListener(myLocationListener);
// 設(shè)置定位的相關(guān)配置
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
// 返回的定位結(jié)果是百度經(jīng)緯度,默認(rèn)值gcj02(國(guó)測(cè)局加密經(jīng)緯度坐標(biāo)),其他bd09ll(百度加密經(jīng)緯度坐標(biāo)),bd09ll(百度加密經(jīng)緯度坐標(biāo))
option.setCoorType("gcj02");
// 設(shè)置發(fā)起定位請(qǐng)求的間隔時(shí)間
option.setScanSpan(1000);
// 反編譯地址
myLocation.setLocOption(option);
}
/**
* 實(shí)現(xiàn)定位回調(diào)監(jiān)聽
*
* @author Administrator
*
*/
private class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
if (location == null || mMapView == null)
return;
/** 構(gòu)造定位數(shù)據(jù) */
MyLocationData locationData = new MyLocationData.Builder()
.accuracy(location.getRadius())
/** 緯度 */
.latitude(location.getLatitude())
/** 經(jīng)度 */
.longitude(location.getLongitude()).build();
/** 設(shè)置定位數(shù)據(jù) */
baiduMap.setMyLocationData(locationData);
/** 當(dāng)前的緯度 */
mCurrentLatitude = location.getLatitude();
/** 當(dāng)前的經(jīng)度 */
mCurrentLongitude = location.getLongitude();
/** 設(shè)置自定義標(biāo)記 */
BitmapDescriptor currentMarker = BitmapDescriptorFactory
.fromResource(R.drawable.marker);
MyLocationConfigeration configeration = new MyLocationConfigeration(
mCurrentMode, true, currentMarker);
baiduMap.setMyLocationConfigeration(configeration);
/** 第一次定位時(shí),將地圖位置移動(dòng)到當(dāng)前位置 */
if (isFristLocation) {
isFristLocation = false;
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
baiduMap.animateMapStatus(u);
}
}
}
@Override
protected void onResume() {
// MapView的生命周期與Activity同步,當(dāng)activity掛起時(shí)需調(diào)用MapView.onPause()
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
// MapView的生命周期與Activity同步,當(dāng)activity掛起時(shí)需調(diào)用MapView.onPause()
super.onPause();
mMapView.onPause();
}
@Override
protected void onDestroy() {
// MapView的生命周期與Activity同步,當(dāng)activity銷毀時(shí)需調(diào)用MapView.destroy()
mMapView.onDestroy();
mMapView = null;
super.onDestroy();
}
@Override
protected void onStart() {
baiduMap.setMyLocationEnabled(true);
if (!myLocation.isStarted()) {
myLocation.start();
}
super.onStart();
}
@Override
protected void onStop() {
// 關(guān)閉圖層定位
baiduMap.setMyLocationEnabled(false);
myLocation.stop();
super.onStop();
}
/**
* 地圖移動(dòng)到我的位置,此處可以重新發(fā)定位請(qǐng)求,然后定位; 直接拿最近一次經(jīng)緯度,如果長(zhǎng)時(shí)間沒有定位成功,可能會(huì)顯示效果不好
*/
private void center2myLoc() {
LatLng ll = new LatLng(mCurrentLatitude, mCurrentLongitude);
MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
baiduMap.animateMapStatus(u);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.mode, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// 普通地圖
case R.id.id_menu_map_common:
baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
break;
// 衛(wèi)星地圖
case R.id.id_menu_map_site:
baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
break;
// 我的位置
case R.id.id_menu_map_myLoc:
center2myLoc();
break;
}
return super.onOptionsItemSelected(item);
}
}
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。