0

我是安卓新手。我正在开发一个安卓闹钟应用程序。我想在上午 8 点到晚上 8 点之间每隔 30 分钟显示一次闹钟,并每天重复这个闹钟。我的代码在这里。主要活动....

 import java.util.Calendar;

 import android.app.Activity;
 import android.app.AlarmManager;
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.Button;
 import android.widget.CompoundButton;
 import android.widget.Switch;
 import android.widget.Toast;

 public class WaterActivity extends Activity {

Button leftBTN, rightBTN;
Switch toggleSwitch;
Context context = this;
SharedPref pref;
static PendingIntent pendingIntent;
static AlarmManager alarmManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_water);
    leftBTN         =   (Button)findViewById(R.id.leftbtn);
    rightBTN        =   (Button)findViewById(R.id.rightbtn);
    toggleSwitch    =   (Switch)findViewById(R.id.switchbtn);
    pref            =   new SharedPref(context);
    if(pref.getValue(pref.getWaterKey()).equals("on"))
        toggleSwitch.setChecked(true);

    toggleSwitch.setOnCheckedChangeListener(SwitchListener);
    leftBTN.setOnClickListener(new Button.OnClickListener() {
        @Override
        public void onClick(View v) {
            leftBTN.setTextColor(getResources().getColor(R.color.water_color));
            rightBTN.setTextColor(getResources().getColor(R.color.white_color));
            leftBTN.setBackgroundResource(R.drawable.button_bg);
            rightBTN.setBackgroundResource(R.drawable.button_right_bg2);


        }
          });
    rightBTN.setOnClickListener(new Button.OnClickListener() {
        @Override
        public void onClick(View v) {
            rightBTN.setTextColor(getResources().getColor(R.color.water_color));
            leftBTN.setTextColor(getResources().getColor(R.color.white_color));
            rightBTN.setBackgroundResource(R.drawable.button_right_bg);
            leftBTN.setBackgroundResource(R.drawable.button_bg2);


        }
          });
}
private Switch.OnCheckedChangeListener SwitchListener        =   new Switch.OnCheckedChangeListener(){

    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
         if (isChecked) {
             pref.savePre_value(pref.getWaterKey(), "on");
             Toast.makeText(context, "Reminder is on", Toast.LENGTH_SHORT).show();
                Intent intentsOpen = new Intent(context, WaterReceiver.class);
                pendingIntent = PendingIntent.getBroadcast(context,111, intentsOpen, 0);
                alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 10000, pendingIntent);

            } else {
                 pref.savePre_value(pref.getWaterKey(), "off");
                 Toast.makeText(context, "Reminder is off", Toast.LENGTH_SHORT).show();
                 alarmManager.cancel(pendingIntent);
            }
        }
};
@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
    finish();
}
}

这是我的接收器。

  public class WaterReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    Toast.makeText(context, "Time is up!!!!.",
            Toast.LENGTH_LONG).show();

}


 }

请帮助我在这里缺少什么?我怎么能在android中做到这一点。任何人都可以帮助我吗?感谢开始。

4

1 回答 1

3

Preety简单的过程:

  1. 专门安排每天早上 8 点开始的闹钟
  2. 一旦你的每日闹钟响起,安排另一个闹钟重复 30 分钟
  3. 在每次触发第二个警报时,检查时间是否超过晚上 8 点,如果是,则将其删除。

实现起来相当简单,示例代码

public void setDailyAlarms(Context context){

    // Daily Alarm

    AlarmManager manager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 8);
    calendar.set(Calendar.MINUTE, 0);
    Intent intent = new Intent("DAIL_ALARM_TRIGGERED");
    PendingIntent pIntent = PendingIntent.getBroadcast(context,
            100, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    manager.setRepeating(AlarmManager.RTC_WAKEUP,
            calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pIntent);




}

public void setRepeatingAlarm(Context context){
        // Alarm 30 min each'

        AlarmManager manager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent("REPEATING_ALARM_TRIGGERED");
        PendingIntent pIntent = PendingIntent.getBroadcast(context,
                102, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        manager.setRepeating(AlarmManager.RTC_WAKEUP,
                System.currentTimeMillis(), 30*60*1000, pIntent);
}

public void cancelRepeatingAlarm(Context context){
    AlarmManager manager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent("REPEATING_ALARM_TRIGGERED");
    PendingIntent pIntent = PendingIntent.getBroadcast(context,
            102, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    manager.cancel(pIntent);
}

现在,你需要一个广播接收器来接收"DAIL_ALARM_TRIGGERED"意图,一旦你收到这个你就打电话setRepeatingAlarm(),现在一旦你收到这个就会触发广播"REPEATING_ALARM_TRIGGERED",只需检查当前时间是否是晚上 8 点,然后调用cancelRepeatingAlarm()

我想这足以让你实现你的逻辑。

于 2014-08-13T06:08:14.373 回答