我实现了FusedLocation提供程序来定期检索位置,该提供程序在ForegroundService上运行。如果打开了应用程序,则在启动提供程序时可以正常工作。
然后,我有BoradcastReceiver,它在后台运行并定期检查服务器上的状态,并以此为基础启动或停止FusedLocation提供程序。我的问题是,当我从BroadcastReceiver启动FusedLocation提供程序时,它已启动,但是我没有收到任何位置。我也尝试过LocationManager并遇到相同的问题。
我测试了BroadcastReceiver,它会定期检查状态,直到进入休眠模式。这使我提出一个问题,我是否可以从主线程以外的其他线程启动FusedLocation提供程序?
这是我启动BroadcastReceiver的方式:
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);
可能是后台访问限制引起的。检查此-https://developer.android.com/about/versions/oreo/background-location-limits
如果您需要经常访问位置,请使用前台服务。