Android 中基于位置的开发
一、找到自己的位置
归根结底,基于位置的服务所围绕的核心就是确定自己的位置。在Android中实现起来并不困难,主要借助 LocationManager 这个类就可以实现了。
LocationManager 的基本用法:
①要想使用LocationManager 就必须要先获取它的实例
②需要选择一个位置提供器,一般情况下都是获取所有可用的位置提供器
③将选择好的位置提供器传递给getLastKnownLocation()方法中,就可以得到一个Location对象,而这个Location对象包含了你所需要的位置信息,如经纬度、海拔等。虽然此方法可以获取经纬度,但是要想获取移动后最新的位置,LocationManager 提供了一个requestLocaionUpdates()方法,只要传入一个LocationListener 实例。
实例:获取自己当前位置的经纬度
public class MainActivity extends Activity {
private TextView textView;
private LocationManager locationManager;
private String provider;
public static final int SHOW_LOCATION=0;
/*
* LocationManager 的基本用法:(此例子只为获取当前位置的经纬度)
* 步骤一:要想使用LocationManager 首先是要获取他的实例
* 步骤二:选择一个位置提供器provider
* 步骤三:将选择好的位置提供器provider传入getLastKnownLocation()方法中,返回一个Location对象,而这个Location对象就包含了你所要位置信息的经纬度等等信息
*
* 以上三个步骤只是得到当前设备的位置信息,若移动设备改变位置,那么如何获取最新的位置信息呢?
*
* 步骤五:LocationManager 提供一个requestLocationUpdates()方法,只需要传入一个LocationListener的实例
* 步骤四:所以还需要创建一个LocationListener的实例
*
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(TextView)findViewById(R.id.position);
//步骤一:获取LocationManager的实例
locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
//步骤二:获取可用的位置提供器
List<String> providerlist=locationManager.getProviders(true);//true 表示返回只有启动的位置提供器
if (providerlist.contains(LocationManager.GPS_PROVIDER))
{
provider=LocationManager.GPS_PROVIDER;
}
else if (providerlist.contains(LocationManager.NETWORK_PROVIDER))
{
provider=LocationManager.NETWORK_PROVIDER;
}
else
{
//当前没有位置提供器可以选择
Toast.makeText(MainActivity.this, "当前没有位置提供器可以选择", Toast.LENGTH_LONG).show();
return;
}
//步骤三:将选择好的位置提供器传入getLastKnownLocation()方法中,返回一个Location对象,这个Location对象就包含了你所要的位置信息
Location location=locationManager.getLastKnownLocation(provider);
if (location!=null){
//显示当前设备的地理位置
showLocation(location);
}
//步骤五:
//当移动设备位置发生改变时,获取最新的位置信息;第一个参数:位置提供器;第二个参数:监听位置变化的时间间隔;
//第三个参数为:监听位置变化的距离间隔;第四个参数:LocationListener监听器
//这里就表示:每5秒就检测一下位置的变化情况,若移动距离大于10米,就会调用LocationListener的onLocationChanged()方法
locationManager.requestLocationUpdates(provider, 5000, 10, locationListener);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (locationManager!=null){
locationManager.removeUpdates(locationListener);
}
}
// 步骤四:创建 LocationListener 的实例
LocationListener locationListener=new LocationListener() {
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
//这里为当位置发生改变时调用的方法
showLocation(location);
}
};
private void showLocation(final Location location){
String currentposition=location.getLatitude()+"\n"
+location.getLongitude();
textView.setText(currentposition);
}