1

我目前正在开发一个应用程序,我正在使用这个邮政编码来获取 GPS 锁定。 在 Android 上获取用户当前位置的最简单、最可靠的方法是什么?

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

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

我做错了什么?

4

1 回答 1

1

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

您可以通过它的 Intent 将额外内容传递给您的 Activity ,该 Intent 指定它应该做什么并onCreate()处理其逻辑。

您也可以尝试将功能直接放在 AlarmReceiver 中,因为您可以在该类中使用该功能。

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

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

于 2012-12-19T01:48:56.490 回答