我是Android开发新手,我希望我的设备在后台模式下每40秒获取一次GPS位置,即使在应用程序被杀之后也是如此。为此,在MyAlarm.class中,我每隔40秒设置一次重复警报,以调用" RepeatingAlarm.class(扩展BroadcastReceiver)"使用待定意图。在" RepeatingAlarm.class"的onReceive方法中每40秒调用一次,我创建了另一个挂起的意图来调用MyReceiver.class(它扩展了BroadcastReceiver)。我已经通过了在" RepeatingAlarm.class"中创建的这个待定意图。到requestLocationUpdate函数,获取GPS位置。
我的问题在于,有时候我会每隔40秒重复获得相同的纬度和长值,持续至少3分钟。
然后,我的MyReceiver.class的onReceive方法每秒调用一次,而不是在收到GPS位置后调用。我在下面粘贴了我的代码,请帮我解决。
MyAlarm.class
public void StartAlarm(Context context)
{
AlarmManager alm=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, RepeatingAlarm.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
alm.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 40000, pi);
}
RepeatingAlarm.class
public class RepeatingAlarm extends BroadcastReceiver
{
public static LocationManager locationManager = null;
public static PendingIntent pendingIntent = null;
@Override
public void onReceive(Context context, Intent intent)
{
locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
Intent intentp = new Intent(context, MyReceiver.class);
pendingIntent = PendingIntent.getBroadcast(context, 0, intentp, PendingIntent.FLAG_UPDATE_CURRENT);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
provider = locationManager.getBestProvider(criteria, true);
if(provider != null)
{
locationManager.requestSingleUpdate(locationManager.GPS_PROVIDER, pendingIntent);
}
}
}
MyReceiver.class
public class MyReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
String locationKey = LocationManager.KEY_LOCATION_CHANGED;
if (intent.hasExtra(locationKey))
{
Location location = (Location)intent.getExtras().get(locationKey);
double mlatitude = location.getLatitude();
double mlongitude = location.getLongitude();
if(RepeatingAlarm.locationManager != null && RepeatingAlarm.pendingIntent)
{
RepeatingAlarm.locationManager.removeUpdates(RepeatingAlarm.pendingIntent);
}
}
}
}
在上面的代码中,GPS位置每40秒就会收到一次。但是,有时候,如果GPS需要很长时间才能让位置说15分钟,之后每隔40秒就会重复相同的位置,直到大约4分钟。这是我的主要问题。
然后,MyReceiver.class每秒都会频繁调用。请帮我一些代码行来解决这个问题。谢谢大家。
答案 0 :(得分:0)
根据开发人员文档requestSingleUpdate()方法"使用指定的提供者和待处理的意图注册单个位置更新。"
您需要使用requestLocationUpdates()方法。
此方法的第二个参数minimum time interval between location updates, in milliseconds
将允许您再次获取位置&试。