java.lang.IllegalArgumentException:提供者不存在:gps

时间:2016-03-14 07:44:35

标签: android gps android-location

使用GPS获取用户位置,使用Android 5.0的三星Galaxy S5(klte)显示错误,如java.lang.IllegalArgumentException: provider doesn't exist: gps,但设备有GPS。可以告诉Whats错误正确表示没有GPS或无法访问GPS。

有谁知道帮助我解决这个问题。

错误记录

Caused by: java.lang.IllegalArgumentException: provider doesn't exist: gps
at android.os.Parcel.readException(Parcel.java:1544)
at android.os.Parcel.readException(Parcel.java:1493)
at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:584)
at android.location.LocationManager.requestLocationUpdates(LocationManager.java:867)
at android.location.LocationManager.requestLocationUpdates(LocationManager.java:459)
at melbourne.webdesign.karmaridedriver.Driver_location_update.onStartCommand(Driver_location_update.java:62)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3259)
... 9 more

Driver_location_update.java:62

表示行

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 4000, 0, listener);

3 个答案:

答案 0 :(得分:5)

我在我的应用中遇到了同样的事情。在查看崩溃日志时,我发现它发生的设备是RCA Voyager 16GB。看看该设备的规格,我发现它没有GPS。因此,对您的案例提出的问题是,GPS在该设备的其他应用程序中是否正常工作?

在我的情况下,我实际上无法重现这个问题,因为我没有没有gps的设备,但我最好的办法是尝试保护我从该提供商处获得的位置更新。

if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER) ) {
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, Constants.LOCATION_UPDATE_INTERVAL, 0, this);
}

我认为这里真正的答案是转移到FusedLocationProviderApi然后这成为api的问题。但是有时候我更喜欢只是稍微推动一下代码才能使它工作而不是侥幸扯下并开始攻击。

答案 1 :(得分:1)

试试这个 -

private Location getMyLocation() {

        LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        Location myLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);


        // if Location wasn't found
        if (myLocation == null) {
            Criteria criteria = new Criteria();
            criteria.setAccuracy(Criteria.ACCURACY_COARSE);

            String provider = lm.getBestProvider(criteria, true);
            // Use the provider to get the last known location
            myLocation = lm.getLastKnownLocation(provider);
            double lat1 = myLocation.getLatitude();
            double lng1 = myLocation.getLongitude();


        }

        return myLocation;
    }

在onCreate()中调用此方法,并对该活动使用OnMyLocationChangeListener。它对我很有用:))

注意:OnMyLocationChangeListener已弃用(请查看Google文档)

答案 2 :(得分:1)

某些设备上不存在网络或GPS提供程序,因此,如果您启动相应的服务,它将无法正常工作。 最好使用如下if语句进行检查:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name = "Site Unavailable" stopProcessing = "true">
                    <match url = ".*" />
                    <action type = "CustomResponse" statusCode = "503" subStatusCode = "0" statusReason = "Site Unavailable" statusDescription = "Could not download zip" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration> 

工作得很好