Android中使用百度SDK获得经纬度和位置信息

自己的毕业设计选择的是开发一个美食分享的客户端,由于也是刚开始接触安卓开发,所以在做毕设的过程中遇到了很多问题,不过每当解决一个问题的之后,感觉收获还是很大的,有很多问题自己都想些在博客里,供自己和网友参考,但是由于快答辩了,一直在完善毕设,所以就没有时间写,等答辩完,再一一整理,写在这里。
今天解决了关于使用百度SDK获取经纬度和位置信息这方面的内容,由于毕设有一点需要获取当前的位置,但是不需要显示百度地图,直接把位置信息显示出来就行,刚开始接触百度SDK,很多知识都不是很熟悉,就从网上找,但是发现大部分获取的位置信息返回的都是null,最后才发现少了一句option.setAddrType("all");
下面贴出代码,供网友参考,首先是布局文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
    android:id="@+id/btn_start"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:text="Start"/>
 <TextView
    android:id="@+id/tv_loc_info"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="18sp" />
</LinearLayout>

接着就是源码了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package com.zzu.picksomething.msfx;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MyLocation extends Activity {
private TextView locationInfoTextView = null;
private Button startButton = null;
private LocationClient locationClient = null;
private static final int UPDATE_TIME = 5000;
private static int LOCATION_COUTNS = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_mylocation);
    locationInfoTextView = (TextView) this.findViewById(R.id.tv_loc_info);
    startButton = (Button) this.findViewById(R.id.btn_start);
    locationClient = new LocationClient(this);
    //设置定位条件
LocationClientOption option = new LocationClientOption();
    option.setOpenGps(true);                                //是否打开GPS
    option.setCoorType("bd09ll");                          //设置返回值的坐标类型。
    option.setPriority(LocationClientOption.NetWorkFirst);  //设置定位优先级
   option.setProdName("LocationDemo");                    //设置产品线名称。强烈建议您使用自定义的产品线名称,方便我们以后为您提供更高效准确的定位服务。
    option.setScanSpan(UPDATE_TIME);                        //设置定时定位的时间间隔。单位毫秒
    option.setAddrType("all");
    locationClient.setLocOption(option);
    //注册位置监听器
    locationClient.registerLocationListener(new BDLocationListener() {
        @Override
        public void onReceiveLocation(BDLocation location) {
            // TODO Auto-generated method stub
            if (location == null) {
               return;
            }
            StringBuffer sb = new StringBuffer(256);
            sb.append("Time : ");
            sb.append(location.getTime());
            sb.append("\nError code : ");
            sb.append(location.getLocType());
            sb.append("\nLatitude : ");
            sb.append(location.getLatitude());
            sb.append("\nLontitude : ");
            sb.append(location.getLongitude());
            sb.append("\nRadius : ");
                sb.append(location.getRadius());
            if (location.getLocType() == BDLocation.TypeGpsLocation){
                sb.append("\nSpeed : ");
                sb.append(location.getSpeed());
                sb.append("\nSatellite : ");
                    sb.append(location.getSatelliteNumber());
} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){
                sb.append("\nAddress : ");
                sb.append(location.getAddrStr());
            }
            LOCATION_COUTNS ++;
            sb.append("\n检查位置更新次数:");
            sb.append(String.valueOf(LOCATION_COUTNS));
                locationInfoTextView.setText(sb.toString());
        }
        @Override
        public void onReceivePoi(BDLocation location) {
        }
    });
    startButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (locationClient == null) {
                return;
            }
            if (locationClient.isStarted()) {
                startButton.setText("Start");
                locationClient.stop();
            }else {
                startButton.setText("Stop");
                locationClient.start();
               /*
                *当所设的整数值大于等于1000(ms)时,定位SDK内部使用定时定位模式。
                *调用requestLocation( )后,每隔设定的时间,定位SDK就会进行一次定位。
                *如果定位SDK根据定位依据发现位置没有发生变化,就不会发起网络请求,
                *返回上一次定位的结果;如果发现位置改变,就进行网络请求进行定位,得到新的定位结果。
                *定时定位时,调用一次requestLocation,会定时监听到定位结果。
                */
                locationClient.requestLocation();
            }
        }
    });
}
@Override
protected void onDestroy() {
    super.onDestroy();
    if (locationClient != null &amp;&amp; locationClient.isStarted()) {
        locationClient.stop();
        locationClient = null;
    }
}
}

补充:使用百度的SDK获取位置信息,必须要去下载百度最新的SDK,官方网站有,然后放到对应的文件夹。另外需要在配置文件中加入一些权限。