我正在开发一个应用程序,我正在使用此邮政编码来获取GPS锁定。 What is the simplest and most robust way to get the user's current location on Android?
它就像一个魅力!它非常适合我的要求。 我现在要做的是每10分钟触发一次此方法以获取gps信号并将其保存在txt文件中。 我的问题是我无法理解AlarmManager是如何工作的,因为它调用AFAIK活动的onCreate()方法。 即使电话正在睡眠,如何在后台每10分钟使一个AlarmManager调用一个特定的方法?
编辑2: 我已经使用了A - C提供的代码,但由于某种原因,警报没有调用我的类AlarmBroadcastReceiver上的方法。 这是我在MainActivity中的方法。
Intent intent = new Intent (this, AlarmBroadcastReceiver.class);
PendingIntent pendIntent = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService (Context.ALARM_SERVICE);
alarmManager.cancel(pendIntent); //cancel if active already
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis()+4000,
4000, pendIntent);
并在AlarmBroadcastReceiver类中。
public class AlarmBroadcastReceiver extends BroadcastReceiver{
public float accuracy;
public double latitude;
public double longitud;
public static boolean Activado=false;
public void onReceive(Context context, Intent intent) {
Log.d("AlarmManager", "Method onReceiveCalled");
}
我做错了什么?
答案 0 :(得分:1)
除非Activity
的方法是静态的并且在同一个进程中运行,否则不会通过Intents运行单个方法。
你可以通过Intent将额外内容传递给你的Activity,它指定它应该做什么,并在onCreate()
中处理它的逻辑。
您也可以尝试将功能直接放在AlarmReceiver中,因为这是本地的,因为您可以使用该类。
当然,您可以使用处理此问题的后台服务替换活动。
最后,由于您每隔10分钟保存到一个文本文件,因此您可能会专门为保存创建一个类。您所要做的就是在需要的地方使用String
和Context
(我假设文件操作需要Context
)来调用该类。这可以与您的GPS代码集成,最有可能与其他构造函数集成,因此GPS类知道它专门获取位置并保存它。
以下是警报设置的示例:
Intent intent = new Intent (this, AlarmBroadcastReceiver.class);
PendingIntent pendIntent = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService (Context.ALARM_SERVICE);
alarmManager.cancel(pendIntent); //cancel if active already
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis()+600000,
600000, pendIntent);
所以你需要一个Intent,它会变成一个PendingIntent。然后你需要得到一个AlarmManager实例。我的代码的最后一行提前10分钟注册警报,重复10分钟。 AlarmManager.RTC_WAKEUP
强制手机唤醒以执行警报。