2011-12-06 49 views
1

我試圖創建一個Android鬧鐘,當一個動作在另一個屏幕上完成時(即用戶在數學問題中鍵入一個答案),該鬧鐘將關閉。如何在Android上通過另一個屏幕上的操作關閉鬧鐘?

如何:

  1. 允許用戶設置自己的每日鬧鈴在屏幕上用timepicker
  2. 實現該報警
  3. 允許用戶通過做數學題關閉報警器(或任何 其他行動)在另一個屏幕上

我試着按照這個建議的解決方案的例子:Unable to set alarm time in 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);    
    } 
} 

ORIGINAL主頁(創作意圖)

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; 
} 

回答

0

當你創建一個報警器,可以使用AlarmManager方法

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

所以在加入這一權利您可以計算出現在和希望關閉的時間之間的差異,然後指定直到每個後續警報的長度。

要取消,你必須創建相同那種,這是在the documentation定義爲

相同的操作,目的相同的動作,數據,類別和組件的PendingIntent警報,相同的標誌

然後用

cancel(PendingIntent operation)

+0

嗨,所以在我的主要活動中,PendingIntent被定義爲 PendingIntent pi = PendingIntent.getBroadcast(MainPage.this,0,intent,0); 如何取消其他課程?我試過 PendingIntent pi = PendingIntent.getBroadcast(MainPage.this,0,intent,0); cancel(pi); 對不起n00by ... – ellothere

+0

你是如何創建'intent'?用該代碼編輯您的原始問題 – Craigy

+0

感謝您的快速響應!代碼已發佈。 – ellothere

相關問題