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

利用Android的api获取经纬度的方法

2017-06-22 10:59 309 查看
我们知道 在移动开发中涉及到定位的问题 我们通常采用高德,百度等第三方api来实现 ,虽然各家api的坐标体系是不一样的但是他们都提供了相互转换的方法,其实 在Android的官方api中也有定位的api,都在android.location包下。借助这个包下的几个类 我们同样可以实现定位的功能。
我这里简单的写了一个demo


import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

private TextView info;
private LocationManager locationManager;
private String provider;
private Location location;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
info = (TextView) findViewById(R.id.tv);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
}

@Override
protected void onResume() {
super.onResume();
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);//高精度
criteria.setAltitudeRequired(false);//不要求海拔
criteria.setBearingRequired(false);//不要求方位
criteria.setCostAllowed(true);//允许有花费
criteria.setPowerRequirement(Criteria.POWER_LOW);//低功耗
locationManager.setTestProviderEnabled("gps", true);
//从可用的位置提供器中,匹配以上标准的最佳提供器
provider = locationManager.getBestProvider(criteria, true);
//监听位置变化,2秒一次,距离10米以上
locationManager.requestLocationUpdates(provider, 2000*30, 100,locationListener);
//获得最后一次变化的位置
Location location = locationManager.getLastKnownLocation(provider);
if(null!=location){
info.setText("22经度:"+location.getLongitude()+"--"+"纬度:"+location.getLatitude());
}else{
info.setText("没有获取到经纬度11");
}
}else{
Location  location= locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
//监听位置变化,2秒一次,距离10米以上
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 2000*30, 100,locationListener);
if(null!=location){
info.setText("11经度:"+location.getLongitude()+"--"+"纬度:"+location.getLatitude());
}else{
//toggleGPS();
info.setText("没有获取到经纬度22");
}
}
}
//位置监听器
LocationListener locationListener = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}
@Override
public void onProviderEnabled(String provider) {

}
@Override
public void onProviderDisabled(String provider) {

}
//当位置变化时触发
@Override
public void onLocationChanged(Location location) {
//使用新的location更新TextView显示

}
};

@Override
protected void onDestroy() {
super.onDestroy();
locationManager.removeUpdates(locationListener);
locationManager.setTestProviderEnabled(provider, false);
}
}
//权限
<uses-permission android:name="android.permission.INTERNET" />
<!-- GPS定位权限 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />


我在自己测试的时候发现一个问题 当我切换了设置中的定位精度后 这个东西就获取不到经纬度了 只有重启app之后才可以 这太怪异了 不知道啥原因 希望哪位知道的可以告诉我。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息