您好,登錄后才能下訂單哦!
前面已經實現了初始化百度地圖,但是其默認顯示位置是北京地區。換言之,它并沒有根據自己需要而定位不同的位置。這里要介紹的,就是要實現簡單的定位功能。
在AndroidManifest.xml中的application標簽中聲明service組件,因為每個app都擁有自己單獨的定位service:
<application
...
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
...
</application>
2.在AndroidManifest.xml中聲明使用的權限。這個在第一篇介紹中,如果已經聲明過了就足夠使用,可以按照需求參考:
http://developer.baidu.com/map/index.php?title=android-locsdk/guide/v5-0
3.設置一個“我的位置”選項,這里不設置按鈕,直接在菜單中顯示點擊,所以在res里面的menu文件夾下新建一個.xml文件(也可以用默認的),在里面設置一個item(這里用默認的main.xml):
<menu ... <item android:id="@+id/id_map_location" android:showAsAction="never" android:title="我的位置"/> </menu>
4.進行main.java的編寫:
public class MainActivity extends Activity {
...
//定義相關定位變量
private LocationClient mLocationClient;
private MyLocationListener myLocationListener;
private boolean isFirstIn = true;
private double mLatitude;
private double mLongtitude;
private Context context;
private String mAddress;
//自定義定位圖標
private BitmapDescriptor mIconLocation;
...
protected void onCreate(Bundle savedInstanceState) {
...
initLocation();//定位函數
...
}
private void initLocation(){
mLocationMode =LocationMode.NORMAL;//定義地圖顯示模式,這里是普通模式
mLocationClient =new LocationClient(this);//定位服務的客戶端
myLocationListener = new MyLocationListener();//定位請求回調函數
mLocationClient.registerLocationListener(myLocationListener);//注冊監聽
LocationClientOption option = new LocationClientOption();//設置定位參數
option.setCoorType("bd09ll");//返回百度地圖地標
option.setIsNeedAddress(true);//返回定位位置
option.setOpenGps(true);//打開GPS
option.setScanSpan(1000);//每1000ms掃描一次定位
mLocationClient.setLocOption(option);//設置LocationClientOption
//初始化圖標,記得在res下的drawable文件下貼上自定義的圖片
mIconLocation = BitmapDescriptorFactory.fromResource(R.drawable.test1);
}
//在onStart里面開啟定位
protected void onStart() {
super.onStart();
mBaiduMap.setMyLocationEnabled(true);
if(!mLocationClient.isStarted())
mLocationClient.start();
}
//在onStop里面停止定位
protected void onStop() {
super.onStop();
mBaiduMap.setMyLocationEnabled(false);
mLocationClient.stop();
}
//這個是每個工程自定義的Menu監聽,監聽item是否被選中
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
//選中item時的動作定義
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.id_map_location:
LatLng latLng = new LatLng(mLatitude, mLongtitude);//取得目前位置的經緯度
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);//更新經緯度
mBaiduMap.animateMapStatus(msu);//以動畫方式更新地圖狀態
Toast.makeText(context,mAddress,Toast.LENGTH_SHORT).show();//顯示位置信息
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
private class MyLocationListener implements BDLocationListener{
public void onReceiveLocation(BDLocation location){
MyLocationData data = new MyLocationData.Builder()//
.accuracy(location.getRadius())//
.latitude(location.getLatitude())//
.longitude(location.getLongitude())//
.build();
mBaiduMap.setMyLocationData(data);
//設置自定義圖標
MyLocationConfiguration config = new MyLocationConfiguration(mLocationMode, true, mIconLocation);
mBaiduMap.setMyLocationConfigeration(config);
//更新經緯度
mLatitude = location.getLatitude();
mLongtitude = location.getLongitude();
if(isFirstIn)
{
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
mBaiduMap.animateMapStatus(msu);
isFirstIn = false;
mAddress = location.getAddrStr();
Toast.makeText(context,mAddress,Toast.LENGTH_SHORT).show();
}
}
}
}
這里已經實現了簡單的定位功能,小伙伴們可以嘗試一下~
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。