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);