2

目前我正在开发 Android 中的BroadcastReceiver、Service 和 AlarmManager,以在我的项目中开发一项功能。我需要在特定日期的特定时间安排一些任务。

例如:-

星期一 - 上午 9:00 和下午 05:00

星期二 - 上午 9:00 和下午 05:00

星期三 - 上午 9:00 和下午 05:00

星期四 - 上午 9:00 和下午 05:00

周五 - 上午 09:00 和下午 05:00

周六 - 上午 10:00 和晚上 10:00

周日 - 上午 10:00 和晚上 10:00


到目前为止,我所做的是创建了一个活动和广播接收器。点击按钮后,每 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 的set 方法安排第一个警报 有关此方法的详细信息,请参阅this

3.当警报响起时,再次使用共享首选项中的下一个时间段安排下一个警报,再次使用设置方法

于 2012-06-22T08:01:29.727 回答
1

您不需要每 60 秒调用一次,您可以使用日历实例设置触发警报的时间并设置正确的日期,因此警报管理器将在指定的日期和时间触发广播意图。

请注意,如果手机关闭,警报管理器将被重置,因此您必须将警报存储在任何持久存储中并为 BOOT_COMPLETED 操作注册广播接收器以恢复警报。

您可以以小间隔进行测试,这样您就不必等待一整天:)

于 2012-06-22T08:57:49.980 回答