我是靠谱客的博主 坚强书本,这篇文章主要介绍使用百度定位SDK获取当前位置的信息,现在分享给大家,希望可以做个参考。

1、AndroidManifext.xml

复制代码
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
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.njupt.bmap_mylocate" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8" /> <application android:name="com.njupt.bmap_mylocate.Location" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/loc_sdk" android:theme="@style/AppTheme" > <activity android:name="com.njupt.bmap_mylocate.mainActivity" android:configChanges="orientation|keyboardHidden" android:label="@string/loc_sdk" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > <intent-filter> <action android:name="com.baidu.location.service_v2.2" > </action> </intent-filter> </service> </application> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" > </uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE" > </uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > </uses-permission> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" > </uses-permission> <uses-permission android:name="android.permission.READ_LOGS" > </uses-permission> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> </manifest>


2、activity_main.xml

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".GeofenceActivity" > <Button android:id="@+id/add" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="添加围栏" /> <Button android:id="@+id/remove" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/add" android:text="删除围栏" /> </RelativeLayout>


3、main.xml

复制代码
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/btn_favorite_tabheader" android:layout_width="wrap_content" android:layout_height="fill_parent" android:background="@android:color/black" > <TextView android:id="@+id/textview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="@android:color/white"> </TextView> <Button android:id="@+id/StartBtn" android:layout_width="100dip" android:layout_height="50dip" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:text="开始" > </Button> <Button android:id="@+id/locBtn" android:layout_width="100dip" android:layout_height="wrap_content" android:layout_alignBottom="@+id/StartBtn" android:layout_alignTop="@+id/StartBtn" android:layout_toRightOf="@+id/StartBtn" android:text="定位" > </Button> <Button android:id="@+id/setBtn" android:layout_width="100dip" android:layout_height="50dip" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:text="设置" > </Button> <EditText android:id="@+id/addrEdit" android:layout_width="100dip" android:layout_height="40dip" android:layout_above="@+id/setBtn" android:layout_alignLeft="@+id/setBtn" android:layout_alignRight="@+id/setBtn" android:text="detail" > </EditText> <EditText android:id="@+id/edit" android:layout_width="100dip" android:layout_height="40dip" android:layout_above="@+id/setBtn" android:layout_alignLeft="@+id/addrEdit" android:layout_alignRight="@+id/addrEdit" android:text="3000" > </EditText> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/edit" android:layout_alignTop="@+id/edit" android:layout_toLeftOf="@+id/edit" android:text="扫描时间间隔 :" android:textColor="@android:color/white"> </TextView> <EditText android:id="@+id/coorEdit" android:layout_width="100dip" android:layout_height="40dip" android:layout_above="@+id/edit" android:layout_alignLeft="@+id/edit" android:layout_alignRight="@+id/edit" android:text="bd09ll" > </EditText> <CheckBox android:id="@+id/gpsCheck" android:layout_width="wrap_content" android:layout_height="40dip" android:layout_above="@+id/coorEdit" android:layout_alignRight="@+id/coorEdit" android:text="打开GPS" android:textColor="@android:color/white" > </CheckBox> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/coorEdit" android:layout_alignTop="@+id/coorEdit" android:layout_toLeftOf="@+id/coorEdit" android:text="坐标系类型 :" android:textColor="@android:color/white"> </TextView> <Button android:id="@+id/PoiReq" android:layout_width="100dip" android:layout_height="50dip" android:layout_alignBaseline="@+id/textView2" android:layout_alignBottom="@+id/textView2" android:layout_alignParentLeft="true" android:text="PoiRequest" /> <CheckBox android:id="@+id/priorityCheck" android:layout_width="100dip" android:layout_height="50dip" android:layout_alignTop="@+id/gpsCheck" android:layout_toLeftOf="@+id/locBtn" android:text="网络优先级" android:textColor="@android:color/white"/> <Button android:id="@+id/offLineBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/gpsCheck" android:text="离线请求" /> <CheckBox android:id="@+id/isAddrInfocb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/offLineBtn" android:layout_marginBottom="14dp" android:layout_toRightOf="@+id/locBtn" android:text="是否要地址信息" android:textColor="@android:color/white"/> </RelativeLayout>


4、strings.xml

复制代码
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Geofence4.0</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string name="loc_sdk">定位SDK</string> <string name="geofence">地理围栏</string> </resources>


5、导定位SDK的jar包、armeabi目录到lib目录下


6、Location

复制代码
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package com.njupt.bmap_mylocate; import android.app.Application; import android.os.Process; import android.os.Vibrator; import android.util.Log; import android.widget.TextView; import android.widget.Toast; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.BDNotifyListener; import com.baidu.location.GeofenceClient; import com.baidu.location.LocationClient; public class Location extends Application { public LocationClient mLocationClient = null;//LocationClient,定位SDK的核心类 private String mData; public MyLocationListenner myListener = new MyLocationListenner(); public TextView mTv; public NotifyLister mNotifyer=null; public Vibrator mVibrator01; @Override public void onCreate() { mLocationClient = new LocationClient( this ); /**—————————————————————————————————————————————————————————————————— * 这里的AK和应用签名包名绑定,如果使用在自己的工程中需要替换为自己申请的Key * —————————————————————————————————————————————————————————————————— */ mLocationClient.setAK("1d6228b653bfe637080e8c6a56f953a9");//设置已申请AccessKey mLocationClient.registerLocationListener( myListener );//注册监听函数: //位置提醒相关代码 mNotifyer = new NotifyLister(); mNotifyer.SetNotifyLocation(32.128925,118.931046,3000,"gps");//用于设定位置提醒的点的具体信息,4个参数依次为:纬度,经度,半径,坐标类型.4个参数代表要位置提醒的点的坐标,具体含义依次为:纬度,经度,距离范围,坐标系类型(gcj02,gps,bd09,bd09ll) mLocationClient.registerNotify(mNotifyer);//注册位置提醒监听事件: super.onCreate(); } /** * 显示请求字符串 * @param str */ public void logMsg(String str) { try { mData = str; if ( mTv != null ) mTv.setText(mData); } catch (Exception e) { e.printStackTrace(); } } /** * 监听函数,有更新位置的时候,格式化成字符串,输出到屏幕中 */ public class MyLocationListenner implements BDLocationListener { /** * 封装了定位SDK的定位结果,在BDLocationListener的onReceive方法中获取。 * 通过该类用户可以获取error code,位置的坐标,精度半径等信息 * * onReceiveLocation():获取定位结果的接口。用户自己实现这个接口后,监听定位结果。 */ @Override public void onReceiveLocation(BDLocation location) { if (location == null) return ; StringBuffer sb = new StringBuffer(256); sb.append("time : "); sb.append(location.getTime()); sb.append("nerror code : "); sb.append(location.getLocType());//获取error code.161:网络定位结果 , 61:GPS定位结果 , 66:离线定位结果 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("n省:");//获取省份信息 sb.append(location.getProvince()); sb.append("n市:"); sb.append(location.getCity());//获取城市信息 sb.append("n区/县:"); sb.append(location.getDistrict());//获取区县信息 sb.append("naddr : "); sb.append(location.getAddrStr());//获取反地理编码 } sb.append("nsdk version : "); sb.append(mLocationClient.getVersion());//获取定位SDK的版本号 sb.append("nisCellChangeFlag : "); sb.append(location.isCellChangeFlag()); logMsg(sb.toString()); System.out.println(sb.toString()); } /** * onReceivePoi(...):获取POI信息的接口。用户自己实现这个接口后,监听poi的相关结果。 */ public void onReceivePoi(BDLocation poiLocation) { if (poiLocation == null){ return ; } StringBuffer sb = new StringBuffer(256); sb.append("Poi time : "); sb.append(poiLocation.getTime()); sb.append("nerror code : "); sb.append(poiLocation.getLocType()); sb.append("nlatitude : "); sb.append(poiLocation.getLatitude()); sb.append("nlontitude : "); sb.append(poiLocation.getLongitude()); sb.append("nradius : "); sb.append(poiLocation.getRadius()); if (poiLocation.getLocType() == BDLocation.TypeNetWorkLocation){ sb.append("naddr : "); sb.append(poiLocation.getAddrStr()); } if(poiLocation.hasPoi()){ sb.append("nPoi:"); sb.append(poiLocation.getPoi()); }else{ sb.append("noPoi information"); } logMsg(sb.toString()); } } /** * BDNotifyListener:位置提醒接口类,用于设定位置提醒点 * @author Administrator * */ public class NotifyLister extends BDNotifyListener{ /** * onNotify(...): 位置提醒监听事件具体实现 * mlocation表示当前位置, * distance是当前坐标中心点与设定位置提醒的坐标点之间的距离值。 */ public void onNotify(BDLocation mlocation, float distance){ mVibrator01.vibrate(1000); Toast.makeText(getApplicationContext(), "您好,您已经到达一个对你来说有意义的位置...", 1).show(); } } }


7、mainActivity

复制代码
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
package com.njupt.bmap_mylocate; import java.util.regex.Pattern; import android.app.Activity; import android.app.Service; import android.content.Intent; import android.os.Bundle; import android.os.Process; import android.os.Vibrator; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.TextView; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; public class mainActivity extends Activity { private TextView mTv = null; private EditText mSpanEdit; private EditText mCoorEdit; private CheckBox mGpsCheck; private CheckBox mPriorityCheck; private Button mStartBtn; private Button mSetBtn; private Button mLocBtn; private Button mPoiBtn; private Button mOfflineBtn; private CheckBox mIsAddrInfoCheck; private boolean mIsStart; private static int count = 1; private Vibrator mVibrator01 =null; private LocationClient mLocClient; private Button geofenceBtn; public static String TAG = "LocTestDemo"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mTv = (TextView)findViewById(R.id.textview); mSpanEdit = (EditText)findViewById(R.id.edit); mCoorEdit = (EditText)findViewById(R.id.coorEdit); mGpsCheck = (CheckBox)findViewById(R.id.gpsCheck); mPriorityCheck = (CheckBox)findViewById(R.id.priorityCheck); mStartBtn = (Button)findViewById(R.id.StartBtn); mLocBtn = (Button)findViewById(R.id.locBtn); mSetBtn = (Button)findViewById(R.id.setBtn); mPoiBtn = (Button)findViewById(R.id.PoiReq); mOfflineBtn = (Button)findViewById(R.id.offLineBtn); mIsAddrInfoCheck = (CheckBox)findViewById(R.id.isAddrInfocb); mIsStart = false; mLocClient = ((Location)getApplication()).mLocationClient; ((Location)getApplication()).mTv = mTv; mVibrator01 =(Vibrator)getApplication().getSystemService(Service.VIBRATOR_SERVICE); ((Location)getApplication()).mVibrator01 = mVibrator01; //开始/停止按钮 mStartBtn.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { if (!mIsStart) { setLocationOption(); mLocClient.start();//启动定位SDK mStartBtn.setText("停止"); mIsStart = true; } else { mLocClient.stop();//关闭定位SDK mIsStart = false; mStartBtn.setText("开始"); } Log.d(TAG, "... mStartBtn onClick... pid="+Process.myPid()+" count="+count++); } }); //定位按钮 mLocBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mLocClient != null && mLocClient.isStarted()){ /** * 0: 正常发起了定位。 1: 服务没有启动。 2: 没有监听函数。 6: 请求间隔过短。 * 前后两次请求定位时间间隔不能小于1000ms。 */ setLocationOption(); mLocClient.requestLocation();//发起定位,异步获取当前位置.定位结果在ReceiveListener的方法OnReceive方法的参数中返回。 } else Log.d(TAG, "locClient is null or not started"); Log.d(TAG, "... mlocBtn onClick... pid="+Process.myPid()+" count="+count++); Log.d(TAG,"version:"+mLocClient.getVersion()); } }); //设置按钮 mSetBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { setLocationOption(); } }); mPoiBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mLocClient.requestPoi(); } }); //离线基站定位按钮 mOfflineBtn.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { /** * 0: 正常发起了定位。 * 1: 服务没有启动。 * 2: 没有监听函数。 */ int req = mLocClient.requestOfflineLocation();//发起离线定位,异步获取当前位置 Log.d("req","req:"+req); } }); } @Override public void onDestroy() { mLocClient.stop(); ((Location)getApplication()).mTv = null; super.onDestroy(); } //设置相关参数 private void setLocationOption(){ /** * setProdName ( String ): 设置产品线名称。强烈建议您使用自定义的产品线名称,方便我们以后为您提供更高效准确的定位服务。 * setPoiDistance( float ): 设置查询范围,默认值为500,即以当前定位位置为中心的半径大小。 */ LocationClientOption option = new LocationClientOption(); option.setOpenGps(mGpsCheck.isChecked()); //设置是否打开gps, option.setCoorType(mCoorEdit.getText().toString()); //设置坐标类型 option.setServiceName("com.baidu.location.service_v2.9"); option.setPoiExtraInfo(mIsAddrInfoCheck.isChecked()); //设置是否需要POI的电话地址等详细信息。默认值为false,即不返回POI的电话和地址信息。 if(mIsAddrInfoCheck.isChecked()) { option.setAddrType("all");//设置是否需要地址信息.String 值为 all时,表示返回地址信息。其他值都表示不返回地址信息。 } if(null!=mSpanEdit.getText().toString()) { boolean b = isNumeric(mSpanEdit.getText().toString()); if(b) { option.setScanSpan(Integer.parseInt(mSpanEdit.getText().toString())); //设置定位模式,小于1秒则一次定位;大于等于1秒则定时定位 } } // option.setScanSpan(3000); if(mPriorityCheck.isChecked()) { option.setPriority(LocationClientOption.NetWorkFirst); //设置网络优先 } else { option.setPriority(LocationClientOption.GpsFirst); //不设置,默认是gps优先 } option.setPoiNumber(10);//设置POI个数,默认值为3。由于POI查询比较耗费流量,设置最多返回的POI个数,以便节省流量。 option.disableCache(true);//true表示禁用缓存定位,false表示启用缓存定位。 mLocClient.setLocOption(option);//设置参数 } protected boolean isNumeric(String str) { Pattern pattern = Pattern.compile("[0-9]*"); return pattern.matcher(str).matches(); } }


----------------------------------------------------总结起来,其实就是以下三步-------------------------

1、拷AndroidManifest.xml、layout、menu、strings.xml

2、导jar包

3、拷源码

4、做一些必要的修改

最后

以上就是坚强书本最近收集整理的关于使用百度定位SDK获取当前位置的信息的全部内容,更多相关使用百度定位SDK获取当前位置内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部