您的位置:首页 > 移动开发 > Android开发

Android位置服务开发

2014-01-28 20:32 274 查看
原文地址:http://www.devdiv.com/Android-android_-thread-129718-1-1.html一、LocationManager类简介Android中LocationManager类提供了获取系统地理位置服务,这些服务允许应用程序定期获取设备地理位置更新信息,或者查询上一个已知位置;注册/注销来自某个LocationProvider的周期性的位置更新;以及注册/注销接近某个坐标时对一个已定义Intent的触发等。以下是对android location包中一些重要的类的说明:LocationProvider:是location提供者类的抽象父类。一个Location提供者提供了设备定期的地理位置信息。LocationListener:当地理位置改变时,该类提供了回调函数通知应用程序。这个监听对象必须被LocationManager注册。Criteria:该类为应用程序选择合适的Location Provider。下面简要描述一下LocationManager的工作流程:首先,直接实例化LocationManager是不允许的,必须通过以下代码来获取LocationManager实例。
1
LocationManager
locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
通过得到的LocationManager实例,我们可以通过下面的语句来注册一个周期性的位置更新。以下代码从GPS获取位置信息,并且每隔5秒更新一次。最后一个参数是LocationListener的一个引用,我们必须要实现这个类。
01
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
5000
,
0
,
locationListener);
02
03
private
final
LocationListener
locationListener =
new
LocationListener()
{
04
public
void
onLocationChanged(Location
location) {
05
//log it when the location changes  
06
if
(location!= 
null
){  
07
Log.i(
"getLocation"
,
"Locationchanged : Lat: "
+location.getLatitude() +
"Lon: "
+location.getLongitude());  
08
double
latitude= location.getLatitude();
09
double
longitude= location.getLongitude();
10
double
altitude= location.getAltitude();
11
}
12
}
13
}
我们可以通过下面的方法来取得上一次获得的位置信息:
1
Locationlocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);  
最后,需要注意的是,要在AndroidManifest.xml中添加权限设置:
1
<
uses-permission
android:name
=
"android.permission.ACCESS_FINE_LOCATION"
/>
二、LocationManager类使用下面以一个完整的Android工程代码作为示例,介绍了如何使用获得当前设备位置信息。该Demo通过调用LocationManager的getLastKnownLocation方法,显示设备的经度和纬度信息。JAVA代码如下:
01
package
com.devdiv.test.locationmanager_test;
02
03
import
android.app.Activity;
04
import
android.content.Context;
05
import
android.location.Location;
06
import
android.location.LocationManager;
07
import
android.os.Bundle;
08
import
android.widget.TextView;
09
10
public
class
LocationManager_TestActivity
extends
Activity{
11
/**Called when the activity is first created. */
12
@Override
13
public
void
onCreate(BundlesavedInstanceState) {
14
super
.onCreate(savedInstanceState);
15
setContentView(R.layout.main);
16
 
17
LocationManagermLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
18
LocationmLocation = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
19
 
20
updateWithNewLocation(mLocation);
21
}
22
 
23
private
void
updateWithNewLocation(Locationlocation) {
24
 
25
StringmLocationInfo = 
null
;
26
 
27
if
(location!= 
null
){
28
double
lat= location.getLatitude();
29
double
lon= location.getLongitude();
30
mLocationInfo= 
"Latitude:"
+lat +
"\n"
+
"Longitude:"
+lon;
31
}
else
{
32
mLocationInfo= 
"Nolocation found"
;
33
}
34
 
35
((TextView)findViewById(R.id.txt_location_info)).setText(mLocationInfo);
36
}
37
}
注意:需要在AndroidManifest.xml中配置相应权限:
1
<
uses-permission
android:name
=
"android.permission.ACCESS_FINE_LOCATION"
/>
三、LocationManager类使用深入下面的代码展示了如何使用LocationListener来获得位置信息更新。JAVA代码如下:
01
package
com.devdiv.test.locationmanager_test2;
02
03
import
android.app.Activity;
04
import
android.content.Context;
05
import
android.location.Location;
06
import
android.location.LocationListener;
07
import
android.location.LocationManager;
08
import
android.location.LocationProvider;
09
import
android.os.Bundle;
10
import
android.util.Log;
11
import
android.widget.TextView;
12
import
android.widget.Toast;
13
14
public
class
LocationManager_Test2Activity
extends
Activity
implements
LocationListener{
15
 
16
LocationManagermLocationManager;
17
TextViewmTextView;
18
TextViewmTextView2;
19
 
20
 
21
/**Called when the activity is first created. */
22
@Override
23
public
void
onCreate(BundlesavedInstanceState) {
24
super
.onCreate(savedInstanceState);
25
setContentView(R.layout.main);
26
 
27
mTextView= (TextView) findViewById(R.id.txt_location_info);
28
mLocationManager= (LocationManager) getSystemService(Context.LOCATION_SERVICE);
29
 
30
LocationmLocation = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
31
if
(mLocation!= 
null
){
32
mTextView.setText(
"Latitude:"
+mLocation.getLatitude() +
"\n"
+
"Longitude:"
+mLocation.getLongitude());
33
}
else
{
34
mTextView.setText(
"Locationnot found!"
);
35
}
36
 
37
//注意requestLocationUpdates各个参数的含义!
38
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
5000
,
0
,
this
);
39
40
 
41
}
42
43
//在provider状态改变的时候执行下面的操作,状态可以分为:AVAILABLE、OUT_OF_SERVICE、TEMPORARILY_UNAVAILABLE
44
//OUT_OF_SERVICE:ifthe provider is out of service,and this is not expected to change in the near future;
45
//TEMPORARILY_UNAVAILABLE:ifthe provider is temporarily unavailable but is expected to be available shortly;
46
//AVAILABLE:ifthe provider is currently available.
47
@Override
48
public
void
onStatusChanged(Stringprovider,
int
status,Bundle extras) {
49
//TODO Auto-generated method stub
50
Log.d(
"test"
,
"onStatusChanged"
);
51
//mTextView2.setText("onStatusChanged");
52
 
53
Toast.makeText(
this
,
"onStatusChanged"
,Toast.LENGTH_SHORT).show();
54
 
55
if
(status== LocationProvider.AVAILABLE) {
56
//mTextView2.setText("LocationProvider.AVAILABLE");
57
}
else
if
(status== LocationProvider.OUT_OF_SERVICE) {
58
//mTextView2.setText("LocationProvider.OUT_OF_SERVICE");
59
}
else
if
(status== LocationProvider.TEMPORARILY_UNAVAILABLE) {
60
//mTextView2.setText("LocationProvider.TEMPORARILY_UNAVAILABLE");
61
}
62
 
63
}
64
 
65
@Override
66
public
void
onProviderEnabled(Stringprovider) {
67
//TODO Auto-generated method stub
68
Log.d(
"test"
,
"onProviderEnabled"
);
69
}
70
 
71
@Override
72
public
void
onProviderDisabled(Stringprovider) {
73
//TODO Auto-generated method stub
74
Log.d(
"test"
,
"onProviderDisabled"
);
75
}
76
 
77
@Override
78
public
void
onLocationChanged(Location
location) {
79
//TODO Auto-generated method stub
80
Log.d(
"test"
,
"onLocationChanged"
);
81
//double lat = location.getLatitude();
82
//double lon = location.getLongitude();
83
//mTextView.setText("Latitude:" +lat +"\n" +"Longitude:" +lon +"\n" +"onLocationChanged");
84
 
85
mTextView.setText(
"Latitude:"
+location.getLatitude() +
"\n"
+
"Longitude:"
+location.getLongitude() +
"\n"
+
"onLocationChanged"
);
86
 
87
//Toast.makeText(this,"onLocationChanged",Toast.LENGTH_SHORT).show();   
88
}
89
90
}
注意:需要在AndroidManifest.xml中配置相应权限:
1
<uses-permissionandroid:name=
"android.permission.ACCESS_FINE_LOCATION"
/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: