0

我正在尝试编写一个 android 应用程序,该应用程序将在特定时间使手机静音,为此,我使用了AlarmManagerBroadcastReceiver按照本教程的组合。我正在使用一个单独的类,该类将包含使用 设置事件的方法,AlarmManager以便我可以在多个活动中使用该方法。这个类的代码如下:

public class EventScheduler {

    public static void schedule(Event event) {
        Calendar start = event.getStartTime();
        Calendar end = event.getEndTime();
        String status = event.getStatus();

        Context ctx;

        Intent intent = new Intent(ctx, AlarmReceiver.class);
        intent.putExtra("start_time", start);
        intent.putExtra("end_time", end);
        intent.putExtra("status", status);

        PendingIntent sender = PendingIntent.getBroadcast();
        AlarmManager am = (AlarmManager) getSystemSerivce(ALARM_SERVICE);


    }

    public static void unschedule(Event event) {

    }
}

我的第一个问题是关于初始化意图对象。由于此方法是在不扩展 Activity 的类中定义的,因此它没有上下文(ctx),但是此方法将在扩展 Activity 的类中使用,所以我将如何获取这些类的上下文以在初始化中使用的意图?

我的第二个问题是关于初始化 PendingIntent。PendingIntent.getBroadcast()应该采用 4 个参数,那么我将如何再次获取调用此方法的类的上下文以用作第一个参数?同样在文档中它说第二个参数 requestCode 没有使用,这是否意味着这可以0

我的第三个问题是关于初始化 AlarmManager。同样,该ALARM_SERVICE字段来自上下文对象,那么在这种情况下我将使用什么上下文对象?

4

2 回答 2

2

回答有关上下文的问题,如果您在整个应用程序生命周期中需要上下文,您应该传递ApplicationContext而不是直接传递。Activity如果你传递了你的ActivityGarbageCollector当不再需要它时,它就不能从内存中删除,这可能会导致内存泄漏。您可以使用context.getApplicationContext().

希望有帮助。

于 2013-07-01T04:04:00.207 回答
1

您应该将您的方法传递给Context每种方法(在您的情况下,很可能是您的Activity):

public static void schedule(Context ctx, Event event) {
    // ...
}
public static void unschedule(Context ctx, Event event) {
    // ...
}

是的,requestCode因为PendingIntent.getBroadcast()总是可以为零。

于 2013-07-01T03:52:42.867 回答