如何从BroadcastReceiver启动FusedLocationProvider

问题描述 投票:0回答:1

我实现了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);
android xamarin xamarin.forms xamarin.android google-play-services
1个回答
0
投票

可能是后台访问限制引起的。检查此-https://developer.android.com/about/versions/oreo/background-location-limits

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

© www.soinside.com 2019 - 2024. All rights reserved.