2

現在、私はAndroid のBroadcastReceiver、Service、および AlarmManagerに取り組んでおり、プロジェクトの機能の 1 つを開発しています。特定の日の特定の時間にタスクをスケジュールする必要があります。

例:-

月曜日 - 午前 9:00 & 午後 5:00

火曜日 - 午前 9:00 & 午後 5:00

水曜日 - 午前 9:00 & 午後 5:00

木曜日 - 午前 9:00 & 午後 5:00

金曜日 - 午前 9:00 & 午後 5:00

土曜日 - 午前 10:00 と午後 10:00

日曜日 - 午前 10:00 & 午後 10:00


私が今まで行ってきたことは、1 つのアクティビティとブロードキャストレシーバーを作成することです。ボタンをクリックすると、60 秒ごとにブロードキャスト レシーバが呼び出されます。これが私のコードスニペットです。しかし、上記の週に従ってタスクをスケジュールしたいと考えています。上記のようにタスクをスケジュールする方法を教えてください。

コード:-

public class AlarmDemoActivity extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button buttonStart = (Button)findViewById(R.id.start);
        buttonStart.setOnClickListener(new Button.OnClickListener(){

            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent myIntent = new Intent(getBaseContext(),
                        MyScheduledReceiver.class);

                PendingIntent pendingIntent
                = PendingIntent.getBroadcast(getBaseContext(),
                        0, myIntent, 0);

                AlarmManager alarmManager
                = (AlarmManager)getSystemService(ALARM_SERVICE);
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                calendar.add(Calendar.SECOND, 10);
                long interval = 60 * 1000; //
                alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                        calendar.getTimeInMillis(), interval, pendingIntent);
                finish();
            }});
    }
}

ブロードキャストレシーバー:-

public class MyScheduledReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        /*Intent scheduledIntent = new Intent(context, MyScheduledActivity.class);
        scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(scheduledIntent);*/

        System.out.println("Make Phone Silent");
    }

}

すべての提案とヒントを歓迎します。

4

2 に答える 2

3

これについては、非常に高いレベルでアイデアを提供します。自分でコーディングを理解する必要があります。

1.ユーザー設定を共有設定に保存します(すでに行っていると思います)

2.Alarm Managerの設定方法で最初のアラームをスケジュールする この方法の詳細については、こちらを参照してください

3.そのアラームが鳴ったら、共有設定の次の期間を使用して次のアラームをスケジュールし、設定された方法を再度使用します。

于 2012-06-22T08:01:29.727 に答える
1

60 秒ごとに呼び出す必要はありません。カレンダー インスタンスを使用してアラームを発生させる時刻を設定し、正しい日付を設定すると、アラーム マネージャーは指定された日時にブロードキャスト インテントを起動します。

電話の電源を切るとアラーム マネージャがリセットされるため、アラームを永続ストレージに保存し、BOOT_COMPLETED アクションのブロードキャスト レシーバを登録してアラームを復元する必要があることに注意してください。

短い間隔でテストできるので、一日中待つ必要はありません:)

于 2012-06-22T08:57:49.980 に答える