Android中获取location永为null

本文记录了一位开发者在尝试使用Android设备获取GPS坐标时遇到的问题。作者详细描述了即便已正确设置权限并能获取到GPS Provider,但在实际环境中始终无法获得有效的经纬度数据的经历。文章还分享了用于获取地理位置信息的代码片段。
摘要由CSDN通过智能技术生成

这个倒霉的死bug阻碍了我学习开发百度地图的其中一条路,宝宝很不开心。

1、我确定我已经加了权限,甚至还加多了以防我少加了。。。

2、我可以获取到gps 的Provider

3、有很多网上小伙伴说室内是测试不到gps的,然井卵。。。我单手骑车单手拿手机在校园里奔驰(gps肯定是开着的,耗电巨快),都溜成狗了,这死经纬度都不出来。。。另我设置的位置改变监听是0.1m和3秒。╮(╯▽╰)╭

 

最后附下列代码:如果有哪个小伙伴能够解决我的未解之谜请奉献上我的膝盖。。。

public class MainActivity extends Activity {
 private LocationManager locationManager;
 private String locationProvider;
 private LocationListener locationListener;
 private Button button;
 private TextView textView;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  button = (Button) findViewById(R.id.btn_getlalng);//获取经纬度的button
  textView = (TextView) findViewById(R.id.tv);
  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) {
    // 如果位置发生变化,重新显示
    showLocation(location);
   }
  };

 

  //----点击获取经纬度--------
  button.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    getlalng();
   }
  });
 }

 private void getlalng() {
  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 {
   Toast.makeText(this, "没有可用的位置提供器", Toast.LENGTH_SHORT).show();
   return;
  }
  Location location = locationManager
    .getLastKnownLocation(locationProvider);//有人说第一次调用location是为空,可是我一直在改变位置啊!一直在改变啊!!!一直在监听啊!!!
  while (location == null) {
   locationManager.requestLocationUpdates(locationProvider, 3000,
     (float) 0.1, locationListener);
  }
 }


 @Override
 protected void onDestroy() {
  super.onDestroy();
  if (locationManager != null) {
   // 移除监听器
   locationManager.removeUpdates(locationListener);
  }
 }

 private void showLocation(Location location) {
  String locationStr = "维度:" + location.getLatitude() + "\n" + "经度:"
    + location.getLongitude();
  textView.setText(locationStr);
  Toast.makeText(getApplicationContext(), locationStr, 0).show();
  Log.i("haha", locationStr);
 }

}

虽然未解但希望是暂时的,等我解决了我再更新这死bug的方法

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值