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实例。
通过得到的LocationManager实例,我们可以通过下面的语句来注册一个周期性的位置更新。以下代码从GPS获取位置信息,并且每隔5秒更新一次。最后一个参数是LocationListener的一个引用,我们必须要实现这个类。
我们可以通过下面的方法来取得上一次获得的位置信息:
最后,需要注意的是,要在AndroidManifest.xml中添加权限设置:
二、LocationManager类使用下面以一个完整的Android工程代码作为示例,介绍了如何使用获得当前设备位置信息。该Demo通过调用LocationManager的getLastKnownLocation方法,显示设备的经度和纬度信息。JAVA代码如下:
注意:需要在AndroidManifest.xml中配置相应权限:
三、LocationManager类使用深入下面的代码展示了如何使用LocationListener来获得位置信息更新。JAVA代码如下:
注意:需要在AndroidManifest.xml中配置相应权限:
1 | LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); |
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); |
1 | < uses-permission android:name = "android.permission.ACCESS_FINE_LOCATION" /> |
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 | } |
1 | < uses-permission android:name = "android.permission.ACCESS_FINE_LOCATION" /> |
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 | } |
1 | <uses-permissionandroid:name= "android.permission.ACCESS_FINE_LOCATION" /> |
相关文章推荐
- Android开发之--利用系统自带的服务获取经纬度并转为具体位置
- 第二行代码学习笔记——第十一章:Android特色开发——基于位置的服务
- 利用HTML5开发Android(5)---HTML5地理位置服务在Android中的应用
- Android 特色开发,基于位置的服务
- 阅读郭林《第一行代码》的笔记——第11章 Android特色开发,基于位置的服务
- Android特色开发——基于位置的服务
- Android基于位置的服务开发,百度地图的使用
- (android地图开发) 基于百度Lbs服务定位用户的当前位置
- Android 特色开发,基于位置的服务
- 基于即时通信和LBS技术的位置感知服务(四):Location-Aware-Instant:开发即时位置感知的Android客户端
- (android 地图实战开发)2 创建MapActivity,根据设备当前位置,显示地图
- Android开发位置说明
- Android百度地图2.0运行定位到当前位置时“服务没有启动”
- Android服务开发——WebService
- Android开发之如何监听让服务不被杀死
- Android 项目开发 基于Web Service 服务的中英翻译软件(二)主界面
- Android开发入门之服务的生命周期
- Android基于XMPP Smack openfire 开发的聊天室(一)【会议服务、聊天室列表、加入】