自己的毕业设计选择的是开发一个美食分享的客户端,由于也是刚开始接触安卓开发,所以在做毕设的过程中遇到了很多问题,不过每当解决一个问题的之后,感觉收获还是很大的,有很多问题自己都想些在博客里,供自己和网友参考,但是由于快答辩了,一直在完善毕设,所以就没有时间写,等答辩完,再一一整理,写在这里。
今天解决了关于使用百度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
107package 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;
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() {
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());
}
public void onReceivePoi(BDLocation location) {
}
});
startButton.setOnClickListener(new OnClickListener() {
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();
}
}
});
}
protected void onDestroy() {
super.onDestroy();
if (locationClient != null && locationClient.isStarted()) {
locationClient.stop();
locationClient = null;
}
}
}
补充:使用百度的SDK获取位置信息,必须要去下载百度最新的SDK,官方网站有,然后放到对应的文件夹。另外需要在配置文件中加入一些权限。