版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28963915/article/details/73565100
我们知道 在移动开发中涉及到定位的问题 我们通常采用高德,百度等第三方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之后才可以 这太怪异了 不知道啥原因 希望哪位知道的可以告诉我。