0

特定の時間に電話を無音にする Android アプリケーションを作成しようとしています。そのために、このチュートリアルに従ってAlarmManagerとの組み合わせを使用しています。複数のアクティビティでメソッドを使用できるように、 を使用してイベントを設定するメソッドを含む別のクラスを使用しています。このクラスのコードは次のとおりです。 BroadcastReceiverAlarmManager

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 を拡張するクラスで使用されるため、これらのクラスのコンテキストを初期化で使用するにはどうすればよいですか?意図の?

2 番目の質問は、PendingIntent の初期化についてです。PendingIntent.getBroadcast()は 4 つのパラメーターを受け取ることになっていますが、このメソッドを呼び出すクラスのコンテキストを取得して最初のパラメーターとして使用するにはどうすればよいでしょうか? また、ドキュメントには、2 番目のパラメーターである requestCode が使用されていないと記載されていますが、これは使用できるということ0ですか?

3 番目の質問は、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 に答える