在我的Gps服务中出现问题

时间:2018-05-07 09:09:43

标签: c# android xamarin service gps

我已经被困在一个问题上,因为现在2到3个星期,在网上搜索每个tuto或同样的问题,但我没有找到我的问题的答案。

我实际上是在使用C#

中的Xamarin运行的Android应用程序上工作

这是我的问题: 我想在我的应用程序开始时每隔X分钟请求一次坐标就开始一个GPS服务(这不是相关的)

所以我的服务看起来像:

[Service(Name = "com.xamarin.ServicesDemo2")]
public class GpsService : Service, ILocationListener
{
    static readonly string TAG = typeof(GpsService).FullName;

    private LocationManager _locationManager;
    private Location _location;

    [return: GeneratedEnum]
    public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId)
    {
        Log.Debug(TAG, "OnStartCommand");


        if (_locationManager == null)
            _locationManager = (LocationManager)GetSystemService(LocationService);

        _locationManager.RequestLocationUpdates(LocationManager.GpsProvider, 0, 0, this);

        return StartCommandResult.Sticky;
    }

    public override IBinder OnBind(Intent intent)
    {
        return null;
    }

    public override void OnDestroy()
    {
        Log.Debug(TAG, "OnDestroy");
        base.OnDestroy();
    }

    public void OnLocationChanged(Location location)
    {
        _location = location;
    }

    public void OnProviderDisabled(string provider)
    {
    }

    public void OnProviderEnabled(string provider)
    {
    }

    public void OnStatusChanged(string provider, [GeneratedEnum] Availability status, Bundle extras)
    {
    }
}

我在我的mainActivity中将其称为:

private void BtnValidateClick(object sender, EventArgs e)
{
    Intent serviceToStart = new Intent(this, typeof(GpsService));
    StartService(serviceToStart);
}

当我运行这个并在OnLocationChanged方法中放置一个断点时,我永远不会进入那里,所以我想我做错了。

以下是我的问题:

  • 如何知道OnLocationChanged何时被触发?
  • 如何以及在何处在代码中指明我想每隔X分钟触发一次OnLocationChanged

最后一点,我想要每隔X分钟触发的原因是不要过度使用设备的电池,所以如果你有其他方法,我会接受它!

我为我的英语道歉,我尽我所能......

提前致谢!

1 个答案:

答案 0 :(得分:0)

我通过在模拟器上运行来解决这个问题!当我在模拟器上发送位置时,会触发OnLocationChanged,这就是我所需要的。