带有贪睡按钮的android闹钟应用程序

时间:2017-04-23 18:06:20

标签: android

//MainActivity
public class MainActivity extends AppCompatActivity {
    Button b1, b2, b3;
    TextView t1, t2;
    int date, month, year, hour, min;
    Calendar calendar;
    Date date1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b1 = (Button) findViewById(R.id.pt);
        b2 = (Button) findViewById(R.id.pd);
        b3 = (Button) findViewById(R.id.sa);
        t1 = (TextView) findViewById(R.id.t1);
        t2 = (TextView) findViewById(R.id.t2);
        calendar = Calendar.getInstance();
        date = calendar.get(Calendar.DATE);
        month = calendar.get(Calendar.MONTH);
        year = calendar.get(Calendar.YEAR);
        hour = calendar.get(Calendar.HOUR);
        min = calendar.get(Calendar.MINUTE);
        calendar.set(year, month, date);
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
        TimePickerDialog.OnTimeSetListener onTimeSetListener = new                                   TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker timePicker, int i, int i1) {
                        t1.setText(i + " : " + i1);
                    }
                };
                TimePickerDialog timePickerDialog = new TimePickerDialog(MainActivity.this, onTimeSetListener,
                        hour, min, false);
                timePickerDialog.show();
            }
        });
        b2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final DatePickerDialog.OnDateSetListener onDateSetListener = new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
                        t2.setText(i2 + "-" + (i1 + 1) + "-" + i);
                    }
                };
                DatePickerDialog datePickerDialog = new DatePickerDialog(MainActivity.this, onDateSetListener,
                        year, month, date);
                datePickerDialog.show();
            }
        });
        b3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                TimePickerDialog.OnTimeSetListener onTimeSetListener1 = new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker timePicker, int i, int i1) {
                        Calendar cal = calendar.getInstance();
                        Calendar cal1 = (Calendar) cal.clone();
                        cal1.set(Calendar.HOUR_OF_DAY, i);
                        cal1.set(Calendar.MINUTE, i1);
                        cal1.set(Calendar.SECOND, 0);
                        cal1.set(Calendar.MILLISECOND, 0);
                        if (cal1.compareTo(cal) <= 0) {
                            cal1.add(Calendar.DATE, 1);
                        }
                        Long time = cal1.getTimeInMillis();
                        setAlarm(time);
                    }
                };
                TimePickerDialog timePickerDialog1 = new TimePickerDialog(MainActivity.this, onTimeSetListener1,
                        hour, min, false);
                timePickerDialog1.show();


         }
            });}
            public void setAlarm(Long targetcal){
            AlarmManager alarmManager =        (AlarmManager)getSystemService(ALARM_SERVICE);
            Intent intent = new Intent(MainActivity.this, MyReciever1.class);
                intent.putExtra("key", targetcal);
            PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 9, intent, 0);
            alarmManager.set(AlarmManager.RTC_WAKEUP ,targetcal, pendingIntent );
        }
        }
//MyReciever1

public class MyReciever1 extends AppCompatActivity {
    Vibrator vibrator;
    Button b1, b2;
    Long cal2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_reciever1);
        vibrator = (Vibrator)getSystemService(VIBRATOR_SERVICE);
        vibrator.vibrate(600000);
        Intent intent1 = getIntent();
        cal2 = intent1.getLongExtra("key",0);
        b1= (Button)findViewById(R.id.stop);
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              vibrator.cancel();
                finish();
            }
        });
        b2 = (Button)findViewById(R.id.snooze);
        b2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                MainActivity mainActivity = new MainActivity();
                vibrator.cancel();
                mainActivity.setAlarm(cal2+1000);
                finish();
            }
        });
    }
}

/ 我已经设置了一个按钮来选择时间并在android中设置闹钟一旦闹钟启动另一个活动打开了打盹按钮和停止按钮我的停止工作但是点击贪睡应用程序崩溃 /

1 个答案:

答案 0 :(得分:0)

问题在于此代码:

MainActivity mainActivity = new MainActivity();
vibrator.cancel();
mainActivity.setAlarm(cal2+1000);
finish();

Activity.getSystemService()需要正确初始化的Context,并且在onCreate()之前不能将Activity用作上下文。

onCreate()之前的活动无法使用的系统服务。

使用新标记创建Activity的实例不会让您完成它应该的生命周期。

您可以通过设置捆绑包,使用Intent传递它,启动startActivity并最终检查Activity中的捆绑包值来启动Activity。