2 gcloudnov gcloudnov 于 2015.06.09 19:30 提问

在android开发中使用百度LBS定位服务无法稳定准确获得地理位置 100C

程序代码如下所示,我是仿照网上的实例编写的,在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;
        }
    }
}



12个回答

Airthas
Airthas   2015.06.09 20:42

你工程里缺少东西吧!你虽然设置了每5秒定一次位,可是你的定位回调函数呢?另外,你的地图控件MapView呢?没有这个怎么给你显示地图?
网上有的示例只是片段的,你应该去百度地图开发中心找示例代码或者找完整的Demo。

qq_23062579
qq_23062579 还真是连一个MapView的控件初始化都没有
12 个月之前 回复
u011133213
u011133213   2015.06.09 21:43

我认为你应该是
1.添加百度地图相关lib包有问题,你是网上下载的demo里面取的lib包吗??
百度地图可以定制功能lib包的,就是包里面有一些功能是没有支持的。
2.你申请的key没有对应上

dbzzcz
dbzzcz   2015.06.09 19:53

这可能与你的百度地图Key有关系吧!要是key不对的话就会这样。。。

gcloudnov
gcloudnov 我刚重新对比了一下,key是对的,没有问题,是我代码中有地方使用错了吗?
2 年多之前 回复
oyljerry
oyljerry   Ds   Rxr 2015.06.09 20:13

是不是需要百度授权的key,或者要购买开发者账号等

gcloudnov
gcloudnov 百度定位对非营利个人开发者是免费的,我对比了一下我之前申请的KEY,是一样的,应该不是key的问题,我查看了调试信息,先是显示定位服务正在连接,然后就是定位失败。
2 年多之前 回复
lzp_lrp
lzp_lrp   Ds   Rxr 2015.06.09 21:45

LocType()返回的int值是62,问题可能出现在功能清单文件里面,定位的好多权限写没写,还有在Application内添加Key值的哪里写没写

qq_27582155
qq_27582155   2015.06.09 22:49

官方文档有简单的demo的。

qq_22202859
qq_22202859   2015.06.10 09:34

百度地图除了导入架包,还要导入一个SO文件。你导入了没

fcxxxer
fcxxxer   2015.06.10 20:36

这个问题很普遍啊,同问。。

zfzlsj1
zfzlsj1   2015.06.11 09:48

呵呵,我正好这周也在做百度定位,已经实现了。你的manifest发来看看呢

zfzlsj1
zfzlsj1   2015.06.11 10:00

补充下,百度定位 明确说明不能在 虚拟机中运行,必须真机,而且要求网络通畅。

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片