1. 程式人生 > >使用百度地圖定位當前城市,在瀏覽器中可以,但是在安卓webview中定位失效

使用百度地圖定位當前城市,在瀏覽器中可以,但是在安卓webview中定位失效

使用百度地圖,定位當前所在城市,發現在瀏覽器中,定位很快,但是把html頁面放到webview中,就一直定位不到座標
function getCurPosition() {
	var error_msg ;
	var geolocation = new BMap.Geolocation();
	var gc = new BMap.Geocoder();
	geolocation.getCurrentPosition(function(r) { // 定位結果物件會傳遞給r變數
		if (this.getStatus() == BMAP_STATUS_SUCCESS) { // 通過Geolocation類的getStatus()可以判斷是否成功定位。
			var pt = r.point;
			gc.getLocation(pt, function(rs) {
				var addComp = rs.addressComponents;
				var address = addComp.city;
				alert(address);
			});
		} else {
			switch (this.getStatus()) {
			case 2:
				error_msg = '位置結果未知 獲取位置失敗.';
				break;
			case 3:
				error_msg = '導航結果未知 獲取位置失敗.';
				break;
			case 4:
				error_msg = '非法金鑰 獲取位置失敗.';
				break;
			case 5:
				error_msg = '對不起,非法請求位置  獲取位置失敗.';
				break;
			case 6:
				error_msg = '對不起,當前 沒有許可權 獲取位置失敗.';
				break;
			case 7:
				error_msg = '對不起,服務不可用 獲取位置失敗.';
				break;
			case 8:
				error_msg = '對不起,請求超時 獲取位置失敗.';
				break;
			default:
				error_msg = '對不起,無法獲取位置.';
				break;
			}
			layer.closeAll();
			layer.open({
			    content: error_msg,
			    className: 'layer-msg',
			    time: 2
			});
		}
	}, function(error) {
		switch (error.code) {
			case error.PERMISSION_DENIED:
				error_msg = "使用者拒絕對獲取地理位置,"
				break;
			case error.POSITION_UNAVAILABLE:
				error_msg = "位置資訊是不可用,"
				break;
			case error.TIMEOUT:
				error_msg = "請求定位超時,"
				break;
			case error.UNKNOWN_ERROR:
				error_msg = "未知錯誤,"
				break;
			default :
				break;
		}
		layer.closeAll();
		layer.open({
		    content: error_msg+"請手動選擇城市。",
		    className: 'layer-msg',
		    time: 2
		});
	}, {
		timeout : 3000,
		enableHighAccuracy : true,
		maximumAge : 10000
	});
}

後來發現,原來要使webview支援html5定位,需要安卓在呼叫webview前加幾行程式碼,如下:

必須啟用資料庫(可以安卓本地建立資料庫)