1

別の画面でアクションが完了するとオフになるAndroidアラームを作成しようとしています(つまり、ユーザーが数学の問題に答えを入力します)。

どうすればよいですか:

  1. ユーザーがタイムピッカーを使用して画面に毎日のアラームを設定できるようにする
  2. そのアラームを実装する
  3. 別の画面で数学の問題(またはその他のアクション)を実行して、ユーザーがアラームをオフにできるようにする

私は提案された解決策でこの例に従ってみました:Androidでアラーム時間を設定できません

しかし、それは着信音を再生しません。これを行のすぐ下に追加しました

Toast.makeText(BrainBuzzActivity.this, "Alarm has been set.", Toast.LENGTH_LONG).show();

Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
if(alert == null){
     // alert is null, using backup
     alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
     if(alert == null){
        // alert backup is null, using 2nd backup
        alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);               
     }
}

オリジナルのメインページ(意図の作成)

    public class BrainBuzzActivity extends Activity 
    {
        private Button alarm = null;
        private AlarmManager alarmManager = null;
        Calendar cal = Calendar.getInstance();
        static final int DIALOG_TIME = 0;


alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarm = (Button) findViewById(R.id.alarm);
    alarm.setOnClickListener(new View.OnClickListener() {         
        public void onClick(View v) {
            showDialog(DIALOG_TIME);
        }
    });
}

    protected Dialog onCreateDialog(int id) {
    Dialog dialog = null;
    switch(id){
    case DIALOG_TIME:
        dialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {

            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                Calendar c = Calendar.getInstance();
                c.setTimeInMillis(System.currentTimeMillis());
                // c.clear();
                //c.set(Calendar.YEAR, 2011);
                //c.set(Calendar.MONTH, 6);
                //c.set(Calendar.DAY_OF_MONTH, 4);
                c.set(Calendar.HOUR_OF_DAY, hourOfDay);
                c.set(Calendar.MINUTE, minute);
                c.set(Calendar.SECOND, 0);
                //c.set(Calendar.MILLISECOND, 0);
                Intent intent = new Intent(BrainBuzzActivity.this,AlarmReceiver.class);
                PendingIntent pi = PendingIntent.getBroadcast(BrainBuzzActivity.this, 0, intent, 0);
                alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
                alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, pi);
                Toast.makeText(BrainBuzzActivity.this, "Alarm has been set.", Toast.LENGTH_LONG).show();

                Intent i = new Intent(BrainBuzzActivity.this, CloudCapture.class);
                startActivity(i);
            }
        },cal.get(Calendar.HOUR_OF_DAY),cal.get(Calendar.MINUTE),false);
        break;
    }
    return dialog;
}
4

1 に答える 1

0

アラームを作成するときは、AlarmManagerメソッドを使用します

setInexactRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)

そのため、現在とオフにしたい時間の差を計算し、その後の各アラームまでの長さを指定できます。

アラームをキャンセルするには、ドキュメントで次のように定義されている、同じ種類の PendingIntent を作成する必要があります。

同じ操作、同じインテント アクション、データ、カテゴリ、およびコンポーネント、および同じフラグ

そして使用する

cancel(PendingIntent operation)

于 2011-12-06T19:00:13.643 に答える