1. 程式人生 > >百度地圖BaiduMap--學習(二)------定位到自己的位置之沒反應

百度地圖BaiduMap--學習(二)------定位到自己的位置之沒反應

過了開始的那一關,總以為就好一點,可惜人在江湖飄啊,怎能不挨刀,動不動就上刀山下油鍋。。。。

今天的是定位到自己的位置,本來我以為,這塊對著程式碼敲敲程式碼就能輕鬆搞定,結果還是掉水溝裡了。。

貼程式碼吧直接:

其餘的都不變

MainActivity.java

package com.example.baidumaptest;

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.model.LatLng;

public class MainActivity extends Activity {

	private MapView mapView;

	private BaiduMap baiduMap;

	private LocationManager locationManager;

	private String provider;

	private boolean isFirstLocate = true;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		SDKInitializer.initialize(getApplicationContext());
		setContentView(R.layout.activity_main);
		mapView = (MapView) findViewById(R.id.map_view);

		baiduMap = mapView.getMap();
		locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

		List<String> providerList = locationManager.getProviders(true);
		if (providerList.contains(LocationManager.GPS_PROVIDER)) {
			provider = LocationManager.GPS_PROVIDER;
		} else if (providerList.contains(LocationManager.NETWORK_PROVIDER)) {
			provider = LocationManager.NETWORK_PROVIDER;
		} else {
			Toast.makeText(this, "No location provider to use",
					Toast.LENGTH_SHORT).show();
			return;
		}
		Location location = locationManager.getLastKnownLocation(provider);
		if (location != null) {
			navigateTo(location);
		}
		locationManager.requestLocationUpdates(provider, 1000, 1,
				locationListener);

	}

	private void navigateTo(Location location) {

		if (isFirstLocate) {
			LatLng ll = new LatLng(location.getLatitude(),
					location.getLongitude());
			MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
			baiduMap.animateMapStatus(update);
			update = MapStatusUpdateFactory.zoomTo(16f);
			baiduMap.animateMapStatus(update);
			isFirstLocate = false;
		}

	}

	LocationListener locationListener = new LocationListener() {

		@Override
		public void onStatusChanged(String provider, int status, Bundle extras) {

		}

		@Override
		public void onProviderEnabled(String provider) {

		}

		@Override
		public void onProviderDisabled(String provider) {

		}

		@Override
		public void onLocationChanged(Location location) {
			if (location != null) {
				navigateTo(location);
			}

		}
	};

	@Override
	protected void onDestroy() {
		super.onDestroy();
		mapView.onDestroy();
		if (locationManager != null) {
			locationManager.removeUpdates(locationListener);
		}
	}

	@Override
	protected void onPause() {
		super.onPause();
		mapView.onPause();
	}

	@Override
	protected void onResume() {
		super.onResume();
		mapView.onResume();
	}
}
程式碼我就不解釋了,解釋的網上一大堆,我就說說執行出來沒反應的原因之一(畢竟出錯容易開叉,我只是其中的岔路之一)

其餘的不變,這時候某些同學是執行出來了,某些同學則是一臉懵逼(me,too),出現的還是偉大領袖毛主席宣佈我們站起來的地方,我是上網各種找啊,都快哭了,就是找不到原因,別人也是這麼幹的,為什麼就偏偏濺我一臉血

後來找到最最開始入門的一個專案(就是獲取經緯度顯示在textview上那個,我一直沒成功),這兩個一個德行,都是找不到位置提供器,我就奇了怪了,長得帥還有錯,這麼懲罰我,各種翻身,最後把別人的一個找經緯度的demo執行一下,位置提供器倒是有了,但是還是不行,不出經緯度還是各種試,發現某個人說得好啊,出門試試,你們家又沒有露天泳池,就跑到戶外,來回晃悠幾下,出來了。。。

趕緊回來試試地圖定位,出來晃悠幾圈還是我敬愛的那個地方,喝了點水,看了會電子書,算是崩潰了,差不多半個小時,突然想到,裡裡外外我都檢查了一遍,差了什麼呢,許可權,對,就是許可權狗,最開始我也是一大堆許可權都寫進去了,後來y因為key的原因,我用了別人的許可權,倒是這邊的地圖定位還是那幾個許可權,對比了一下,就是這個許可權

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
執行一下,終於出現了我們家門口的殺豬場。。。

我也是個有故事的人。。。