最近开发应用时遇到GPS定位的问题。
以下是简单示例和部分问题记录。
转载请注明,http://blog.youkuaiyun.com/u013670933/article/details/25318095 谢谢!
public class MainActivity extends Activity {
private TextView show;
private LocationManager locManager;
// 设置日期格式
@SuppressLint("SimpleDateFormat")
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
show = (TextView)findViewById(R.id.text);
//创建LocationManager对象
locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
//从network获取最近的定位信息
Location location = locManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
//显示定位信息
update(location);
//设置每隔3秒获取一次GPS的定位信息,忽略位置变化
locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,3000, 0, new LocationListener() {
@Override
public void onLocationChanged(Location location) {
//当GPS定位信息发生变化时,更新位置
update(location);
}
@Override
public void onProviderEnabled(String provider) {
//当GPSLocationProvider可用时,更新位置
update(locManager.getLastKnownLocation(provider));
}
@Override
public void onProviderDisabled(String arg0) {
update(null);
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
}
});
}
//显示定位信息
public void update(Location newLocation) {
String resultString;
if (newLocation != null) {
//纬度
double latitude = newLocation.getLatitude();
//经度
double longitude = newLocation.getLongitude();
// 速度
float speed =newLocation.getSpeed();
// 精度
float accuracy = newLocation.getAccuracy();
// 返回UTC时间
long time = newLocation.getTime();
resultString = "纬度:" + latitude
+ "\n经度:" + longitude
+ "\n精度:" + accuracy
+ "\n速度:" + speed
+ "\n时间:"+sdf.format(time);
} else {
resultString = "无法获取位置信息";
}
show.setText("您当前的位置信息是:\n" + resultString);
}
}
实现定位功能需添加权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
问题注意:
一:locationManager.getLastKnownLocation(provider):
返回上次的地理位置,如果之前手机未定过位,会先返回null的;
二:本实例是利用network实现定位,若利用gps,有几点注意。
1.检查手机GPS是否打开。
2.通过GPS定位是需要时间的,所以真正的信息是在requestLocationUpdates()方法中的。
Demo示例下载:http://download.youkuaiyun.com/detail/u013670933/7317073