4

私のコードスニペットは次のとおりです。

mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if(mLocationManager.getProvider(LocationManager.GPS_PROVIDER) != null) {
    mLocationManager.removeTestProvider(LocationManager.GPS_PROVIDER);
}

mLocationManager.addTestProvider(LocationManager.GPS_PROVIDER,
            "requiresNetwork" == "", "requiresSatellite" == "",
            "requiresCell" == "", "hasMonetaryCost" == "",
            "supportsAltitude" == "", "supportsSpeed" == "",
            "supportsBearing" == "",

android.location.Criteria.POWER_LOW,
        android.location.Criteria.ACCURACY_FINE);

location = new Location(LocationManager.GPS_PROVIDER);

mLocationManager.setTestProviderEnabled(
        LocationManager.GPS_PROVIDER, true);

// mLocationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER,
// location);

location.setLatitude(FinalLatitudeIntArray[0]);
location.setLongitude(FinalLongitudeIntArray[0]);
mLocationManager.setTestProviderLocation(
        LocationManager.GPS_PROVIDER, location);

エラーが発生しました:

java.lang.IllegalArgumentException: Provider "gps" unknown
at android.os.Parcel.readException(Parcel.java:1326)
at android.os.Parcel.readException(Parcel.java:1276)
at android.location.ILocationManager$Stub$Proxy.removeTestProviderEnabled(ILocationManager.java:1097)
at android.location.LocationManager.removeTestProviderEnabled(LocationManager.java:1130)

このエラーを整理するのを手伝ってください。たす。以前はアプリケーションは正常に実行されていましたが、システムを再起動すると、アプリケーションでエラーが表示され始めました。

4

2 に答える 2

3

ロケーションマネージャーのAndroidドキュメントから:

removeTestProvider() throws 
IllegalArgumentException    if no provider with the given name exists

そのため、エミュレータでテストしている場合は、再起動によってGPSの設定がリセットされている可能性があります(権限とDDMSを確認して再度有効にしてみてください)。デバイス上にある場合は、GPSを無効にしておく必要があります([設定]に移動してGPSを有効にします)。

編集:関連するものが見つかりました:ここ。基本的に、エミュレーターで不安定に見えることが起こっています。そのスレッドのコメントから、次のようCriteria.ACCURACY_FINEにの代わりに使用してみてください。LocationManager.GPS_PROVIDER

    LocationManager locationManager = (LocationManager)context.getSystemService( Context.LOCATION_SERVICE );

    Criteria criteria = new Criteria();
    criteria.setAccuracy( Criteria.ACCURACY_FINE );
    String provider = locationManager.getBestProvider( criteria, true );

    if ( provider == null ) {
        Log.e( TAG, "No location provider found!" );
        return;
    }

詳細については、そのスレッドを参照してください。

于 2012-11-25T09:39:25.583 に答える
1

最近の一部のデバイスにはGPSがないため、同じ問題が発生していました。良い方法は「varevarao」で述べたとおりですが、基準法を使用すると問題も発生しました。一部のデバイスでは、「getBestProvider」でnullを返します(以下のコードを参照)。

    Criteria criteria = new Criteria();
    criteria.setAccuracy( Criteria.ACCURACY_FINE );
    String provider = locationManager.getBestProvider( criteria, false );

    if ( provider == null ) {
        criteria.setAccuracy( Criteria.ACCURACY_COARSE );
        provider = locationManager.getBestProvider( criteria, true );
        Log.d( "Function", "No location provider found!" );
        return;
    }

私はそれを解決するためにこれを行いました(以下のコードを参照)。それが最善の方法かどうかはわかりませんが、現在はうまくいきます。これは、デバイスで利用可能な「ロケーションプロバイダー」のリストを取得し、最初のリストを取得することで機能します(モックロケーションに使用しているだけなので、問題ではありません)。

   List<String> tmpProviders = locationManager.getAllProviders();

   if (!tmpProviders.isEmpty() && tmpProviders.toArray()[0] != null && !tmpProviders.toArray()[0].toString().isEmpty() ) {
      mocLocationProvider = tmpProviders.toArray()[0].toString();
  } else {// your error goes here }
于 2013-01-29T16:11:25.307 に答える