程序代码如下所示,我是仿照网上的实例编写的,在manifests文件中已经添加了识别码以及百度定位的service,权限也按照百度的说明文档添加好了,在虚拟机中运行效果为无法获取地理位置,错误码62,真机运行则毫无反应,我完全找不到是什么地方出了问题,哪位大大可以帮我看一下吗?
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
/**
* Created by GCloud on 2015/4/14.
*/
public class LocationPageFragment extends Fragment implements View.OnClickListener {
private static final String TAG = "dzt";
private TextView mText;
private LocationClient mLocationClient = null;
private BDLocationListener myListener = new MyLocationListener();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLocationClient = new LocationClient(getActivity().getApplicationContext()); // 声明LocationClient类
mLocationClient.registerLocationListener(myListener); // 注册监听函数
setLocationOption();
mLocationClient.start();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.layout, null);
mText = (TextView)view.findViewById(R.id.location_response);
Button btn = (Button)view.findViewById(R.id.location_request);
btn.setOnClickListener(this);
return view;
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
mLocationClient.stop();// 停止定位
}
/**
* 设置相关参数
*/
private void setLocationOption() {
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
option.setIsNeedAddress(true);// 返回的定位结果包含地址信息
option.setAddrType("all");// 返回的定位结果包含地址信息
option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02
option.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000ms
mLocationClient.setLocOption(option);
}
public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
if (location == null)
return;
StringBuffer sb = new StringBuffer(256);
sb.append("当前时间 : ");
sb.append(location.getTime());
sb.append("\n错误码 : ");
sb.append(location.getLocType());
sb.append("\n纬度 : ");
sb.append(location.getLatitude());
sb.append("\n经度 : ");
sb.append(location.getLongitude());
sb.append("\n半径 : ");
sb.append(location.getRadius());
if (location.getLocType() == BDLocation.TypeGpsLocation) {
sb.append("\n速度 : ");
sb.append(location.getSpeed());
sb.append("\n卫星数 : ");
sb.append(location.getSatelliteNumber());
}
else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
sb.append("\n地址 : ");
sb.append(location.getAddrStr());
}
mText.setText(sb.toString());
Log.d(TAG, "onReceiveLocation " + sb.toString());
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.location_request:
if (mLocationClient != null && mLocationClient.isStarted())
mLocationClient.requestLocation();
else
Log.d(TAG, "locClient is null or not started");
break;
default:
break;
}
}
}
这是百度地图普遍存在的问题,当然这并不是百度地图的问题,定位受环境的影响比较大。曾经见到有人使用基站定位,你可以尝试使用基站定位,是否可以提高定位准确性,我也不是很清楚,据说滴滴打车就用到了这个。。。
这可能与你的百度地图Key有关系吧!要是key不对的话就会这样。。。
是不是需要百度授权的key,或者要购买开发者账号等
你工程里缺少东西吧!你虽然设置了每5秒定一次位,可是你的定位回调函数呢?另外,你的地图控件MapView呢?没有这个怎么给你显示地图?
网上有的示例只是片段的,你应该去百度地图开发中心找示例代码或者找完整的Demo。
我认为你应该是
1.添加百度地图相关lib包有问题,你是网上下载的demo里面取的lib包吗??
百度地图可以定制功能lib包的,就是包里面有一些功能是没有支持的。
2.你申请的key没有对应上
LocType()返回的int值是62,问题可能出现在功能清单文件里面,定位的好多权限写没写,还有在Application内添加Key值的哪里写没写
官方文档有简单的demo的。
百度地图除了导入架包,还要导入一个SO文件。你导入了没
这个问题很普遍啊,同问。。
呵呵,我正好这周也在做百度定位,已经实现了。你的manifest发来看看呢
补充下,百度定位 明确说明不能在 虚拟机中运行,必须真机,而且要求网络通畅。
虚拟机不行的,要真机