最近在做Android手机应用开发,还是很有意思的。其实如果只是做简单手机应用开发而不是手机游戏开发的话,还是很简单的。把主要的控件掌握了,就可以开发简单的应用了。
下面主要说一下在Android中使用GPS功能。
开发由于GPS功能时,常与Google Map相关,因此先推荐一篇讲解Google Map的文章:
http://mobiforge.com/developing/story/using-google-maps-android
该文章详细的讲解了Android中如何使用Google Map的各种功能。文章甚好,强烈推荐。
看完了如上文章后,我们就来讲解下如何使用GPS。
首先在AndroidManifest.xml中添加位置服务权限:
1 | < uses-permission android:name = "android.permission.ACCESS_FINE_LOCATION" /> |
然后再看如下代码例:
1 | LocationManager locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE); |
2 | Location loc = locMan.getLastKnownLocation(LocationManager.GPS_PROVIDER); |
3 | if (loc != null ) { |
4 | lat = loc.getLatitude(); |
5 | Log.d(TAG, "latitude: " + lat); |
6 | lng = loc.getLongitude(); |
7 | Log.d(TAG, "longitude: " + lng); |
8 | } |
先注册LocationManager,然后就可以通过访问getLastKnownLocation得到当前的GPS坐标。是不是很简单。
既然是GPS,我们当然不只是想知道当前的位置,更重要的是要随着位置的移动,GPS信息也要更新。那么我们需要怎么做呢?
还先看如下代码例:
01 | LocationListener locLis = new MyLocationListener(); |
02 | locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000 , 10 , |
03 | locLis); |
04 | ... |
05 | ... |
06 | ... |
07 | public class MyLocationListener implements LocationListener { |
08 | @Override |
09 | public void onLocationChanged(Location loc) { |
10 | if (loc != null ) { |
11 | p = new GeoPoint(( int ) (loc.getLatitude() * 1E6), |
12 | ( int ) (loc.getLongitude() * 1E6)); |
13 | mc.animateTo(p); |
14 | mc.setZoom( 14 ); |
15 | mc.setCenter(p); |
16 | } |
17 | } |
18 | |
19 | @Override |
20 | public void onProviderDisabled(String provider) { |
21 | } |
22 | |
23 | @Override |
24 | public void onProviderEnabled(String provider) { |
25 | } |
26 | |
27 | @Override |
28 | public void onStatusChanged(String provider, int status, Bundle extras) { |
29 | } |
30 | } |
声明自己的LocationListener后,调用requestLocationUpdates方法,就可以得到最新的GPS信息。
常用方法说明:
public void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)
当时间超过minTime(单位:毫秒),或者位置移动超过minDistance(单位:米),就会调用listener中的方法更新GPS信息。
官方文档中有如下说明:
1. minTime的值最好是不小于60000(即:1分钟),这样会更加高效且节电。
2. 如果要尽可能实时的更新GPS信息,请将minTime和minDistance都设置成0。