您的位置:首页 > 移动开发 > Android开发

android:LocationManager详解(-)

2015-10-26 18:59 281 查看
通过在网络上查找相关资料以及阅读相关源码,总结如下:

这个类提供访问系统位置服务的访问。这些服务允许应用程序获得定期更新设备的地理位置。

点击下载源码:一个简单的demo,从网络中获取GPS信息

1、LocationManager : provider

public static final String NETWORK_PROVIDER = "network";
相关权限:
android.permission.ACCESS_COARSE_LOCATION
android.permission.ACCESS_FINE_LOCATION


public static final String GPS_PROVIDER = "gps";
相关权限:
android.permission.ACCESS_FINE_LOCATION


public static final String PASSIVE_PROVIDER = "passive";
相关权限:
android.permission.ACCESS_FINE_LOCATION


LocationManager.GPS_PROVIDER:GPS,精度高,速度慢,耗电对,而且可能因为天气原因或者障碍物而无法获取卫星信息,另外设备可能没有GPS模块(比如说一些平板);

LocationManager.NETWORK_PROVIDER:通过网络获取定位信息,精度低,网络通畅时速度快,耗电少,不依赖GPS模块。

2、获得LocationManager实例

protected LocationManager  locationManager;
locationManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);


3、LocationListener:位置监听器接口

protected final LocationListener locationListener=new LocationListener() {

// Provider的在可用、暂时不可用和无服务三个状态直接切换时触发此函数
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub

}
//  Provider被enable时触发此函数,比如GPS被打开
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub

}
// Provider被disable时触发此函数,比如GPS被关闭
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub

}
//当坐标改变时触发此函数
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
mlocation=location;

}
};


4、获取所有的Provider

//获取当前设备所有的Provider

List<String> allprovides=locationManager.getAllProviders();
for(String allprovide:allprovides){
Log.i("Test", allprovide);
}


5、绑定监听与解绑

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

locationManager.removeUpdates(locationListener);


6、注意事项

在使用网络获取GPS时,需要先判断基于网络的位置服务是否开启了。
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)


7、一个简单的例子

package com.example.locationmanagerdemo;

import java.util.List;

import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {
protected LocationManager  locationManager;
protected Location mlocation;
TextView gpstext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gpstext=(TextView) findViewById(R.id.gpstext);
locationManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);

//首先判断网络是否可用
if(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}else{
//将手机位置服务中--基于网络的位置服务关闭后,则获取不到数据
showgps("NETWORK_PROVIDER不可用,无法获取GPS信息!");
}

//获取当前设备说有的Provider

List<String> allprovides=locationManager.getAllProviders();
for(String allprovide:allprovides){
Log.i("Test", allprovide);
}

}

protected final LocationListener locationListener=new LocationListener() {

// Provider的在可用、暂时不可用和无服务三个状态直接切换时触发此函数
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub

}
//  Provider被enable时触发此函数,比如GPS被打开
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub

}
// Provider被disable时触发此函数,比如GPS被关闭
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub

}
//当坐标改变时触发此函数
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
mlocation=location;
//解除监听
locationManager.removeUpdates(locationListener);
String  gpsinfo="GPS: Latitude="+mlocation.getLatitude()+"   Longitude="+mlocation.getLongitude();
showgps(gpsinfo);
}
};

public void showgps(String info){
gpstext.setText(info);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}


点击下载源码:一个简单的demo,从网络中获取GPS信息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息