gpt4 book ai didi

java - AlarmManager android调用具体方法

转载 作者:行者123 更新时间:2023-11-30 03:52:18 25 4
gpt4 key购买 nike

我目前正在开发一个应用程序,我正在使用这个邮政编码来获取 GPS 锁。 What is the simplest and most robust way to get the user's current location on Android?

它就像一个魅力!它非常适合我的要求。我现在要做的是每 10 分钟触发一次此方法以获取 gps 信号并将其保存在 txt 文件中。我的问题是我一直无法理解 AlarmManager 是如何工作的,因为它调用 AFAIK Activity 的 onCreate() 方法。如何让 AlarmManager 在后台每 10 分钟调用一次特定方法,即使电话处于 hibernate 状态?

编辑 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");
}

我做错了什么?

最佳答案

除非 Activity 的方法是静态的并且在同一进程中运行,否则您不会通过 Intents 运行单个方法。

您可以通过其 Intent 将附加信息传递给您的 Activity,该 Intent 指定它应该做什么,并在 onCreate() 中处理该逻辑。

您也可以尝试将功能直接放在 AlarmReceiver 中,因为对于该类来说,这是尽可能本地化的。

当然,您可以用处理此问题的后台服务替换 Activity。

最后,由于您每 10 分钟保存到一个文本文件中,您可能会创建一个专门用于保存的类。您所要做的就是从您需要的任何地方使用 StringContext(我假设文件操作需要 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 强制唤醒手机以执行闹钟。

关于java - AlarmManager android调用具体方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13944365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com