【问题标题】:`locationManager.isProviderEnabled(locationManager.GPS_PROVIDER);` always returns true`locationManager.isProviderEnabled(locationManager.GPS_PROVIDER);` 总是返回 true
【发布时间】:2015-08-29 12:44:16
【问题描述】:

我正在测试一个使用Location 服务的应用程序。每当我的位置服务关闭时,它都会返回导致NPE (Null Pointer Exception) 的空值。所以经过一番搜索,我发现

    isGPSEnabled = locationManager.isProviderEnabled(locationManager.GPS_PROVIDER);

应该返回正确的boolean value,但在测试我的应用程序时,它似乎总是返回true,导致NPE (Null Pointer Exception) 并导致我的应用程序崩溃。

我还阅读了this 问题。显然有完全相反的问题并尝试了该解决方案。那也没用。我正在三星 G5 上进行测试。为什么会这样。代码有问题还是我的问题有其他解决方案。

代码如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    isGPSEnabled = false;
    intentThatCalled = getIntent();
    String m2txt = intentThatCalled.getStringExtra("v2txt");
    getLocation(m2txt);
}
public void getLocation(String n2txt) {
    locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    criteria = new Criteria();
    bestProvider = String.valueOf(locationManager.getBestProvider(criteria, true)).toString();
    location = locationManager.getLastKnownLocation(bestProvider);
    isGPSEnabled = locationManager.isProviderEnabled(locationManager.GPS_PROVIDER);
    if (isGPSEnabled==true) {
        Log.e("TAG", "GPS is on");
        latitude = location.getLatitude();
        longitude = location.getLongitude();
        Toast.makeText(PlacesDecoder.this, "latitude:" + latitude + " longitude:" + longitude, Toast.LENGTH_SHORT).show();
        searchNearestPlace(n2txt);
    }
}

我仍然是 android 的初学者。 请帮忙。

编辑: This 问题似乎在同一个硬件型号上也有同样的问题。这是硬件错误吗?如果是,是否还有其他可能。我还将在另一台设备 Note-4 上进行测试并通知您。

【问题讨论】:

    标签: java android nullpointerexception location locationmanager


    【解决方案1】:

    解决您的问题的方法是永远不要假设您有一个位置,仅仅因为您的 GPS 已启用并不意味着您将获得一个位置。

    您可以随时获得null 位置,因此您不必担心是否启用了 GPS,而应该担心返回的位置是否为空。

    getLastKnownLocation() 如果没有最后一个位置,可以返回 null

    【讨论】:

    • 我试过这个,但是当我这样做时,它会请求ACCESS_FINE_LOCATION 的许可,添加时会弄乱我的应用程序。
    • 还有什么办法吗?
    • 试过了,检查是否为空?如果你想从 gps 获取数据,你需要有权限ACCESS_FINE_LOCATION
    • 是的,谢谢,我现在试过了,它奏效了。在它崩溃之前。我不知道为什么。不过还是谢谢。它现在正在工作。
    • 对不起,这总是返回 false。
    猜你喜欢
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 2017-05-10
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多