安卓Gps定位初步探究

无聊在寝室瞎鼓捣,写出个程序可以用手机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接口,实现里面的方法,悄悄告诉你,其实这里什么都不写也是可以的~~~~。

猜你喜欢

转载自jackchunyang.iteye.com/blog/2108877