Android APP 在 getLastKnownLocation() 上崩溃

Posted

技术标签:

【中文标题】Android APP 在 getLastKnownLocation() 上崩溃【英文标题】:Android APP crash on getLastKnownLocation() 【发布时间】:2017-10-11 13:00:02 【问题描述】:

我正在开发一个通过 NETWORK_PROVIDER 实现该位置的 android 应用程序,但我在 Android 7 上执行它时遇到问题(虽然它在以前的版本上正常工作)。这是代码:

LocationManager posM;
double latitude;
double longitude;

List<Address> addresses = null;

try 
    posM =  (LocationManager) getSystemService(LOCATION_SERVICE);
    Location location = posM.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
    latitude = location.getLatitude();
    longitude = location.getLongitude();

    Geocoder geocoder;

    geocoder = new Geocoder(Activity1.this, Locale.getDefault());

    addresses = geocoder.getFromLocation(latitude, longitude, 1);
 catch (IOException e) 
    e.printStackTrace();

我不知道它为什么会在 Android 7 上崩溃...谢谢您的帮助

【问题讨论】:

请添加堆栈跟踪 显示错误堆栈跟踪 请问,如何在手机上获取错误堆栈跟踪? 你在 android studio 底部的 android 监视器中得到它 “虽然它在以前的版本上正常工作”——不,它没有。它碰巧在您有限的测试中起作用。但是,正如 Gabe 所指出的,getLastKnownLocation() 会大量返回null,您需要能够处理这些问题。 The documentation 描述了这个过程。仅将getLastKnownLocation() 用作优化,而不是您获取位置的主要方式。 【参考方案1】:

因为getLastKnownLocation 大部分时间都返回 null。系统一般不知道你的location。使用requestLocationUpdatesrequestSingleUpdate开启location检测并获取实际位置。

【讨论】:

谢谢,但为什么这种情况只发生在 Android 7 上?它完美适用于 5... 它会成功还是失败,这取决于系统是否有一个它已经知道并且不是陈旧的位置,在任何操作系统上。您在 7 而不是 5 上看到它的事实是巧合。也许您有另一个应用程序正在使用您的 5 设备而不是 7 设备上的位置。或者缓存代码可能有点挂起。但它可以而且将会发生在任何操作系统版本上。 getLastKnownLocation 可以用作优化,但从不依赖。

以上是关于Android APP 在 getLastKnownLocation() 上崩溃的主要内容,如果未能解决你的问题,请参考以下文章

[Android][App不显示在最近使用过的应用程序列表中]

如何对Android的APP进行签名

android开发怎么更改一个完成的app包名

如何对Android的APP进行签名

android直播app怎么开发

如何在Delphi XE7下写一个Android APP