NatureDay 2014-08-25
无聊在寝室瞎鼓捣,写出个程序可以用手机Gps模块定位了,当时还是挺激动的呢,下面把我瞎鼓捣的过程分享一下~~~。
先放一下成品图吧:左边是定位时截取的图,右边是定位完成时截取的图。
在程在程序里是有线程辅助用户判断Gps信息是在更新的。就是最下面两行字啦~~。
首先,要使用手机里的Gps模块是要权限的,在安卓工程的AndroidManifest.Xml文件内添加这么一条语句就行了。
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
这条语句的位置参照下图:
好,配置完了Xml文件那么这个程序就有获取位置信息的权限了。
要得到位置信息,就要在Activity里实例化一个LocationManager,再给这LocationManager申请使用Gps模块,再返回位置信息。就这三个步骤!!!
final LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000, 1, new TestLocationListener()); Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
来解释一下这三条语句吧,第一条就是实例化一个LocationManager对象了,说他要用系统服务里面的位置服务;第二天就是给这个LocationManager申请地点更新需要用到的Gps模块,第二个参数1000表示隔1s更新一次位置信息,第三个参数1表示如果距离变化超过1m则更新一次位置信息,若两个参数都为0 表示尽可能频繁的请求位置信息第四个参数是一个位置监听器了。
好,有了前两条语句,于是加上第三条语句就可以得到位置信息啦,需要什么信息就在location对象里面取就行啦。不过这里会有一个问题,就是没开Gps模块的时候或者还没有定位完成的时候是没有位置信息的,如果这时去取location里的信息,就会报空指针异常。所以我们还得稍微处理一下。
比如像下面这样:
if (location != null) {// 如果有GPS信息的话 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); double latitude = location.getLatitude(); double longitude = location.getLongitude(); long Time = location.getTime(); float Speed = location.getSpeed(); float Accuracy = location.getAccuracy(); double Altitude = location.getAltitude(); a1.append("最后一次的位置信息:"); a1.append("\n精度: " + Accuracy); a1.append("\n纬度 : " + latitude); a1.append("\n经度 : " + longitude); a1.append("\n海拔: " + Altitude); a1.append("\n速度: " + Speed + "m/s"); a1.append("\n速度: " + Speed * 3.6 + "km/h"); a1.append("\n时间 : " + sdf.format(Time)); } else a1.setText("无地理位置信息");
这里的a1是一个TextView。
最后实现一下上面三行语句中第二个语句里面的第四个参数TestLocationListener吧,这个类要继承LocationListener接口,实现里面的方法,悄悄告诉你,其实这里什么都不写也是可以的~~~~。