0

MvvmCross Location プラグインを使用しています。MvxGeoLocation の成功が発生するデバイスもあれば、発生しないデバイスもあります。私は答えのある他の同様の質問を見てきました(MVVMCross IMvxGeoLocationWatcher Success Action never fires on Android)。ただし、これはすべてのデバイス (再起動) で機能するわけではないため、解決策は有効ではありません。私が現在テストしているデバイスは、Android V 4.0.3、HTC Vivid です。クライアントは、デバイスで同じ問題を報告しています。以下は、私の LocationService コードです。OnLocation メソッドは、これらのデバイスで起動することはありません。

public class LocationService : ILocationService
{
    private readonly IMvxGeoLocationWatcher _locationWatcher;
    private readonly IMvxMessenger _messenger;

    public double Latitude { get; set; }
    public double Longitude { get; set; }

    public bool HasLocation()
    {
        return (Latitude != 0.0 && Longitude != 0.0);
    }

    public LocationService(IMvxGeoLocationWatcher locationWatcher, IMvxMessenger messenger)
    {
        _locationWatcher = locationWatcher;
        _messenger = messenger;
        _locationWatcher.Start(new MvxGeoLocationOptions(){ EnableHighAccuracy = true}, OnLocation, OnError);
    }

    private void OnError(MvxLocationError error)
    {
        _messenger.Publish(new GpsUnavailableMessage(this));
    }

    private void OnLocation(MvxGeoLocation location)
    {
        Latitude = location.Coordinates.Latitude;
        Longitude = location.Coordinates.Longitude;

        var message = new LocationMessage(this, location.Coordinates.Latitude, location.Coordinates.Longitude);
        _messenger.Publish(message);
    }
}

LogCat に表示されるメッセージは次のとおりです。これは GPS 位置情報を取得しているように見えますか?

07-31 11:54:59.883: V/GpsLocationProvider(246): SV count: 9 ephemerisMask: 93d5 almanacMask: 93d5
07-31 11:54:59.883: V/GpsLocationProvider(246): sv: 1 snr: 0.0 elev: 7.0 azimuth: 146.0 E A
07-31 11:54:59.883: V/GpsLocationProvider(246): sv: 3 snr: 0.0 elev: 33.0 azimuth: 49.0 E A
07-31 11:54:59.883: V/GpsLocationProvider(246): sv: 5 snr: 0.0 elev: 0.0 azimuth: 0.0 E A
07-31 11:54:59.883: V/GpsLocationProvider(246): sv: 7 snr: 0.0 elev: 74.0 azimuth: 351.0 E A
07-31 11:54:59.883: V/GpsLocationProvider(246): sv: 8 snr: 0.0 elev: 43.0 azimuth: 314.0 E A
07-31 11:54:59.883: V/GpsLocationProvider(246): sv: 9 snr: 0.0 elev: 36.0 azimuth: 312.0 E A
07-31 11:54:59.883: V/GpsLocationProvider(246): sv: 10 snr: 0.0 elev: 0.0 azimuth: 0.0 E A
07-31 11:54:59.883: V/GpsLocationProvider(246): sv: 13 snr: 0.0 elev: 39.0 azimuth: 188.0 E A
07-31 11:54:59.883: V/GpsLocationProvider(246): sv: 16 snr: 0.0 elev: 1.0 azimuth: 66.0 E A

これはAndroidの問題のモノですか?次のコードは、ILocationListener をトリガーしません。

    [Register("requestLocationUpdates", "(Ljava/lang/String;JFLandroid/location/LocationListener;)V", "GetRequestLocationUpdates_Ljava_lang_String_JFLandroid_location_LocationListener_Handler")]
    public virtual void RequestLocationUpdates(string provider, long minTime, float minDistance, ILocationListener listener);
4

1 に答える 1

0

これは、アップグレード時の Xamarin.Android の問題のようです。Xamarin.Android を完全にアンインストールしてから v 4.8 を再インストールすると、問題が解決しました。

于 2013-08-06T13:56:24.403 に答える