基本步骤:
1:要使用LocationManager就要先获取它的实例,通过调用getSystemService()方法可以获取到
private LocationManager locationManager;
locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
2:Android有三种位置提供器,最常用的是GPS或者网络定位。即GPS_PROVIDER和NETWORK_PROVIDER,前者准确,后者省电。但都需要用户主动去使用。
我们将选择的位置提供器传入getLastKnownLocation()方法,然后得到一个Location对象。我们叫它location。
private String provider;
provider=LocationManager.GPS_PROVIDER;
Location location=locationManager.getLastKnownLocation(provider);
3:如果需要判断有哪些位置提供器可用
List<String> providerList=locationManager.getProviders(true);
使用getProviders()方法,接收
返回值为true的位置提供器,即将所有打开的位置提供器传入数组
providerList,在providerList中寻找并确认自己所需要的位置提供器
如:
if(providerList.contains(LocationManager.GPS_PROVIDER)){
provider=LocationManager.GPS_PROVIDER;
}else if(providerList.contains(LocationManager.NETWORK_PROVIDER)){
provider=LocationManager.NETWORK_PROVIDER;
}else{
Toast.makeText(this, "No locationProvider to use", Toast.LENGTH_SHORT).show();
return;
}
4:考虑到用户会带着设备到处移动,我们需要更新位置信息。
可以使用
requestLocationUpdates(provider, 5000, 1, locationListener){}
参数分别为位置提供器类型,监听位置变化时间间隔,监听位置变化距离间隔(米),LocationListener监视器。
getLastKnownLocation(provider)
得到具体位置信息。
5:需要权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
main_xml:
文本控件。
<TextView
android:id="@+id/position_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
main_activity:
public class MainActivity extends ActionBarActivity {
private TextView positionTextView;
private LocationManager locationManager;
private String provider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取LocationManager实例
positionTextView=(TextView)findViewById(R.id.position_text_view);
locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
//返回已启动的位置提供器
List<String> providerList=locationManager.getProviders(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(this, "No locationProvider to use", Toast.LENGTH_SHORT).show();
return;
}
//将位置提供器传入函数,得到location包含位置信息
Location location=locationManager.getLastKnownLocation(provider);
//显示当前位置信息
if(location!=null){
showLocation(location);
}
locationManager.requestLocationUpdates(provider, 5000, 1, locationListener);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();//关闭时移除监听器
if(locationManager!=null){
locationManager.removeUpdates(locationListener);
}
}
//位置管理器的监听器,以在位置改变时更新位置信息
LocationListener locationListener=new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
//位置改变时更新位置信息
showLocation(location);
}
};
private void showLocation(Location location) {
// TODO Auto-generated method stub
String currentPosition="latitude is"+location.getLatitude()
+"\n"+"longitude is"+location.getLongitude();
//得到纬度latitude和经度longitude
positionTextView.setText(currentPosition);
}
}