1

何らかの通知を生成したい。この通知は、ユーザーが timePicker ダイアログで時間を設定したときに生成されます。これがシナリオです。ボタンをクリックすると、タイムピッカーダイアログが表示され、ユーザーは時間を選択できます..しかし、時間を設定したいときに、アプリが動かなくなり、強制的に閉じるように求められます..私が望むのはいつですかユーザーが設定した時刻を午後 10 時 45 分としましょう。ユーザーに通知するために午後 10 時 45 分に通知が生成されます。

これは私のTabTwoclassです:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tab_two);

    btnBrfkst = (Button) findViewById(R.id.button1);
    btnMtea = (Button) findViewById(R.id.button2);
    btnLunch = (Button) findViewById(R.id.button3);
    btnAftea = (Button) findViewById(R.id.button4);
    btnDinner = (Button) findViewById(R.id.button5);
    btnSupper = (Button) findViewById(R.id.button6);

    mCalen = Calendar.getInstance();
    hourOfDay = mCalen.get(Calendar.HOUR_OF_DAY);
    minute = mCalen.get(Calendar.MINUTE);
    ampm = mCalen.get(Calendar.AM_PM);

    btnBrfkst.setOnClickListener(this);
    btnMtea.setOnClickListener(this);
    btnLunch.setOnClickListener(this);
    btnAftea.setOnClickListener(this);
    btnDinner.setOnClickListener(this);
    btnSupper.setOnClickListener(this);
}

@Override
@Deprecated
protected Dialog onCreateDialog(int id) {

    switch (id) {
        case Time_PICKER_ID:
            return new TimePickerDialog(this, TimePickerListener,
                    hourOfDay, minute, false);
    }
    return null;
}


private TimePickerDialog.OnTimeSetListener TimePickerListener =
        new TimePickerDialog.OnTimeSetListener() {

            private Calendar current;

            // while dialog box is closed, below method is called.
            public void onTimeSet(TimePicker view, int hour, int minute) {

                switch (timePickerInput) {
                    case R.id.button1:

                mCalen.set(Calendar.HOUR_OF_DAY, hour);
                mCalen.set(Calendar.MINUTE, minute);

                int hour12format = mCalen.get(Calendar.HOUR);
                hourOfDay = mCalen.get(Calendar.HOUR_OF_DAY);
                minute = mCalen.get(Calendar.MINUTE);
                ampm = mCalen.get(Calendar.AM_PM);
                String ampmStr = (ampm == 0) ? "AM" : "PM";

                // Set the Time String in Button
                btnBrfkst.setText(hour12format + " : " + minute + " / " + ampmStr);
                break;

                case R.id.button2:
                mCalen.set(Calendar.HOUR_OF_DAY, hour);
                mCalen.set(Calendar.MINUTE, minute);

                 int hour12format2 = mCalen.get(Calendar.HOUR);
                 hourOfDay = mCalen.get(Calendar.HOUR_OF_DAY);
                 minute = mCalen.get(Calendar.MINUTE);
                 ampm = mCalen.get(Calendar.AM_PM);
                 String ampmStr2 = (ampm == 0) ? "AM" : "PM";
                 btnMtea.setText(hour12format2 + " : " + minute + " / " + ampmStr2);
                 break;

                case R.id.button3:
                mCalen.set(Calendar.HOUR_OF_DAY, hour);
                mCalen.set(Calendar.MINUTE, minute);

                 int hour12format3 = mCalen.get(Calendar.HOUR);
                  hourOfDay = mCalen.get(Calendar.HOUR_OF_DAY);
                 minute = mCalen.get(Calendar.MINUTE);
                  ampm = mCalen.get(Calendar.AM_PM);
                  String ampmStr3 = (ampm == 0) ? "AM" : "PM";
                 btnLunch.setText(hour12format3 + " : " + minute + " / " + ampmStr3);
                break;

                    case R.id.button4:
                    mCalen.set(Calendar.HOUR_OF_DAY, hour);
                    mCalen.set(Calendar.MINUTE, minute);

                    int hour12format4 = mCalen.get(Calendar.HOUR);
                    hourOfDay = mCalen.get(Calendar.HOUR_OF_DAY);
                    minute = mCalen.get(Calendar.MINUTE);
                    ampm = mCalen.get(Calendar.AM_PM);
                    String ampmStr4 = (ampm == 0) ? "AM" : "PM";
                    btnAftea.setText(hour12format4 + " : " + minute + " / " + ampmStr4);
                break;

                    case R.id.button5:
                        mCalen.set(Calendar.HOUR_OF_DAY, hour);
                        mCalen.set(Calendar.MINUTE, minute);

                        int hour12format5 = mCalen.get(Calendar.HOUR);
                        hourOfDay = mCalen.get(Calendar.HOUR_OF_DAY);
                        minute = mCalen.get(Calendar.MINUTE);
                        ampm = mCalen.get(Calendar.AM_PM);
                        String ampmStr5 = (ampm == 0) ? "AM" : "PM";
                        btnDinner.setText(hour12format5 + " : " + minute + " / " + ampmStr5);
                break;

                    case R.id.button6:
                        mCalen.set(Calendar.HOUR_OF_DAY, hour);
                        mCalen.set(Calendar.MINUTE, minute);

                        int hour12format6 = mCalen.get(Calendar.HOUR);
                        hourOfDay = mCalen.get(Calendar.HOUR_OF_DAY);
                        minute = mCalen.get(Calendar.MINUTE);
                        ampm = mCalen.get(Calendar.AM_PM);
                        String ampmStr6 = (ampm == 0) ? "AM" : "PM";
                btnSupper.setText(hour12format6 + " : " + minute + " / " + ampmStr6);
                break;
                }

                if(mCalen.compareTo(current) <= 0){
                    //The set Date/Time already passed
                       Toast.makeText(getApplicationContext(), 
                         "Invalid Date/Time", 
                         Toast.LENGTH_LONG).show();
                   }else{
                    setAlarm(mCalen);
                   }


            }
        };



        private void setAlarm(Calendar targetmCalen){
              Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
              PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
              AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
              alarmManager.set(AlarmManager.RTC_WAKEUP, targetmCalen.getTimeInMillis(), pendingIntent);   
             }


@Override
public void onClick(View v) {
    timePickerInput = v.getId();
    showDialog(Time_PICKER_ID);

これは、通知を生成する AlarmReceiver クラスです

    private static final int MY_NOTIFICATION_ID=1;
     NotificationManager notificationManager;
     Notification myNotification;

     @Override
     public void onReceive(Context context, Intent intent) {
      Toast.makeText(context, "Time is set", Toast.LENGTH_LONG).show();

         Intent myIntent = new Intent(context, MainActivity.class);
         PendingIntent pendingIntent = PendingIntent.getActivity(
                context, 
                0, 
                myIntent, 
                Intent.FLAG_ACTIVITY_NEW_TASK);

         myNotification = new NotificationCompat.Builder(context)
           .setContentTitle("eMedicine")
           .setContentText("Time to take your medicine")
           .setTicker("Notification!")
           .setWhen(System.currentTimeMillis())
           .setContentIntent(pendingIntent)
           .setDefaults(Notification.DEFAULT_SOUND)
           .setAutoCancel(true)
           .setSmallIcon(R.drawable.ic_launcher)
           .build();

         notificationManager = 
           (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
         notificationManager.notify(MY_NOTIFICATION_ID, myNotification);
     }
}
4

0 に答える 0