记录-Android根据手机gps或者网络获取当前位置
2016-08-24 09:50
417 查看
如果应用需要定位城市,可以这么做:
先获取LocationManager 然后根据可用的位置提供器获取Location,代码如下
private LocationManager locationManager;
private static Location location
private String locationProvider;
private boolean flag=false;
/** 定位 */
private void GetLocation(){
//获取地理位置管理器
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//获取所有可用的位置提供器
List<String> providers = locationManager.getProviders(true);
if(providers.contains(LocationManager.GPS_PROVIDER)){
//如果是GPS
locationProvider = LocationManager.GPS_PROVIDER;
}else if(providers.contains(LocationManager.NETWORK_PROVIDER)){
//如果是Network
locationProvider = LocationManager.NETWORK_PROVIDER;
}else{
//没有可用
}
//获取Location
location = locationManager.getLastKnownLocation(locationProvider);
//可查看是否授权获取定位信息
flag = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0;
//在更新检测后,才去获取地理位置
if(location!=null){
//不为空,获取地理位置经纬度
GetCity(location);
}else{
}
//监视地理位置变化 --不需要用到
// locationManager.requestLocationUpdates(locationProvider, 3000, 1, locationListener);
}
/**
* 显示地理位置经度和纬度信息
* @param location
*/
private void GetCity(Location location){
String cit=null;
//当location对象不为空-获取位置之后--获取页面数据
if(location!=null){
String latLongString = null;
String locationStr = "维度:" + location.getLatitude() +"\n"
+ "经度:" + location.getLongitude();
System.out.println("经纬度 "+locationStr);
List<Address> addList = null;
Geocoder ge = new Geocoder(context);
try {
//根据经纬度-获取地理位置
addList = ge.getFromLocation(location.getLatitude(), location.getLongitude(),1);
} catch (IOException e) {
e.printStackTrace();
}
if(addList!=null && addList.size()>0){
for(int i=0; i<addList.size(); i++){
Address ad = addList.get(i);
//获取城市
latLongString = ad.getLocality();
}
}
if(latLongString!=null){
//截取城市名
String GlobalVariable.City=latLongString.substring(0, latLongString.indexOf("市"));
System.out.println("当前位置 "+GlobalVariable.City);
// }
}
}else{
//当用户拒绝定位权限时进行其他操作
}
}
/**
* LocationListern监听器
* 参数:地理位置提供器、监听位置变化的时间间隔、位置变化的距离间隔、LocationListener监听器
*/
LocationListener locationListener = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle arg2) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onLocationChanged(Location location) {
//如果位置发生变化,重新显示
GetCity(location);
}
};
先获取LocationManager 然后根据可用的位置提供器获取Location,代码如下
private LocationManager locationManager;
private static Location location
private String locationProvider;
private boolean flag=false;
/** 定位 */
private void GetLocation(){
//获取地理位置管理器
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//获取所有可用的位置提供器
List<String> providers = locationManager.getProviders(true);
if(providers.contains(LocationManager.GPS_PROVIDER)){
//如果是GPS
locationProvider = LocationManager.GPS_PROVIDER;
}else if(providers.contains(LocationManager.NETWORK_PROVIDER)){
//如果是Network
locationProvider = LocationManager.NETWORK_PROVIDER;
}else{
//没有可用
}
//获取Location
location = locationManager.getLastKnownLocation(locationProvider);
//可查看是否授权获取定位信息
flag = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0;
//在更新检测后,才去获取地理位置
if(location!=null){
//不为空,获取地理位置经纬度
GetCity(location);
}else{
}
//监视地理位置变化 --不需要用到
// locationManager.requestLocationUpdates(locationProvider, 3000, 1, locationListener);
}
/**
* 显示地理位置经度和纬度信息
* @param location
*/
private void GetCity(Location location){
String cit=null;
//当location对象不为空-获取位置之后--获取页面数据
if(location!=null){
String latLongString = null;
String locationStr = "维度:" + location.getLatitude() +"\n"
+ "经度:" + location.getLongitude();
System.out.println("经纬度 "+locationStr);
List<Address> addList = null;
Geocoder ge = new Geocoder(context);
try {
//根据经纬度-获取地理位置
addList = ge.getFromLocation(location.getLatitude(), location.getLongitude(),1);
} catch (IOException e) {
e.printStackTrace();
}
if(addList!=null && addList.size()>0){
for(int i=0; i<addList.size(); i++){
Address ad = addList.get(i);
//获取城市
latLongString = ad.getLocality();
}
}
if(latLongString!=null){
//截取城市名
String GlobalVariable.City=latLongString.substring(0, latLongString.indexOf("市"));
System.out.println("当前位置 "+GlobalVariable.City);
// }
}
}else{
//当用户拒绝定位权限时进行其他操作
}
}
/**
* LocationListern监听器
* 参数:地理位置提供器、监听位置变化的时间间隔、位置变化的距离间隔、LocationListener监听器
*/
LocationListener locationListener = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle arg2) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onLocationChanged(Location location) {
//如果位置发生变化,重新显示
GetCity(location);
}
};
相关文章推荐
- 百度地图API提供Geocoder类
- Android利用API定位
- API 23及之后版本关于用android studio 中LocationManager的方法使用
- Location服务之LocationManager
- Android 位置管理器(LocationManager)
- Android中LocationManager的简单使用01
- Android火星地图纠偏问题
- Android中LocationManager的简单使用02
- Augmented Reality on Android: Using GPS and the Accelerometer
- Android定位当前城市的实现
- 42.Android LocationManager
- android LocationManager的简单使用(获取经纬度信息到textview显示)
- Android定位简介
- Android中LocationManager的简单使用01
- Android定位获取当前经纬度
- iOS开发之地图代理不起作用(提示vImage decode failed, falling back to CG path.)
- 获取百度地图中心点以及滑动地图后中心点的PoiList详情(类似于U步打车首页,关键看思路)
- LocationManager、Criteria、Geocoder的用法
- 百度地图定位功能的使用