Android 如何从BroadcastReceiver启动FusedLocationProvider

Android 如何从BroadcastReceiver启动FusedLocationProvider,android,xamarin,xamarin.forms,xamarin.android,google-play-services,Android,Xamarin,Xamarin.forms,Xamarin.android,Google Play Services,我实现了FusedLocation提供程序来定期检索位置,它在ForegroundService上运行。如果应用程序已打开,则在启动提供程序时,此功能可以正常工作 然后,我有一个BoradCastereceiver,它在后台运行,定期检查服务器上的状态,并在此基础上启动或停止FusedLocation提供程序。我的问题是,当我从BroadcastReceiver启动FusedLocation提供程序时,它已启动,但我没有收到任何位置。我也尝试过LocationManager,但遇到了同样的问题

我实现了FusedLocation提供程序来定期检索位置,它在ForegroundService上运行。如果应用程序已打开,则在启动提供程序时,此功能可以正常工作

然后,我有一个BoradCastereceiver,它在后台运行,定期检查服务器上的状态,并在此基础上启动或停止FusedLocation提供程序。我的问题是,当我从BroadcastReceiver启动FusedLocation提供程序时,它已启动,但我没有收到任何位置。我也尝试过LocationManager,但遇到了同样的问题

我测试了BroadcastReceiver,它会定期检查状态,直到它进入睡眠模式。这就引出了一个问题:是否可以从主线程以外的其他线程启动FusedLocation提供程序

这是我启动广播接收器的方式:

        var mainActivity = CrossCurrentActivity.Current.Activity;
        var alarmIntent = new Intent(mainActivity.ApplicationContext, typeof(UpdateInfoReceiver));
        var pendingIntent = PendingIntent.GetBroadcast(mainActivity.ApplicationContext, 0, alarmIntent, PendingIntentFlags.UpdateCurrent);
        var alarmManager = (AlarmManager)mainActivity.GetSystemService(Context.AlarmService);
        alarmManager.SetInexactRepeating(AlarmType.ElapsedRealtimeWakeup, SystemClock.ElapsedRealtime() + AlarmManager.IntervalFifteenMinutes,  AlarmManager.IntervalFifteenMinutes, pendingIntent);

这可能是由于后台访问限制造成的。 检查这个-


如果您需要经常访问位置-请使用前台服务。

很抱歉,我忘了提到我在ForegroundService上运行了它。是的,您可以。我曾在其他线程中使用fusedLocation提供程序,但在我的例子中,该线程是由ForegroundService启动的。确保线程已真正启动,并调用RequestLocationUpdates()。