2016-12-29 119 views
1

我製作了一個鬧鐘,它幾乎正確地工作,除了它永不停止。 即使我按下我的停止鬧鐘按鈕,它保持振鈴。即使我按下停止按鈕,鬧鈴仍然響鈴

我有兩個按鈕,一個id爲setthealarm,另一個ID stopthealarm

在公共類MainActivity我定義TimePickerPendingIntentAlarmManager

public class activity_mainnew extends Activity { 
TimePicker alarmTimePicker; 
    PendingIntent pendingIntent; 
    AlarmManager alarmManager; 



@SuppressLint("NewApi") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_mainnew); 
alarmTimePicker = (TimePicker) findViewById(R.id.timePicker); 
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
} 

setthetime onClick

@RequiresApi(api = Build.VERSION_CODES.M) 
    public void setthealarm(View view){ 
     Toast.makeText(activity_mainnew.this, "ALARM ON", Toast.LENGTH_SHORT).show(); 
     long time; 

     Calendar calendar = Calendar.getInstance(); 
     calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getHour()); 
     calendar.set(Calendar.MINUTE, alarmTimePicker.getMinute()); 

     Intent intent = new Intent(this, AlarmReceiver.class); 
     pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 

     alarmTimePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS); 

     time = (calendar.getTimeInMillis()-(calendar.getTimeInMillis()%60000)); 
     if(System.currentTimeMillis()>time) 
     { 
      if (calendar.AM_PM == 0) 
       time = time + (1000*60*60*12); 
      else 
       time = time + (1000*60*60*24); 
     } 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, time, 10000, pendingIntent); 
    } 

而且stopthealarm onClick

@RequiresApi(api = Build.VERSION_CODES.M) 
public void stopthealarm(View view){ 
    Toast.makeText(activity_mainnew.this, "ALARM OFF", Toast.LENGTH_SHORT).show(); 
    Intent intent = new Intent(this, AlarmReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 
    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarmManager.cancel(pendingIntent); 
    pendingIntent.cancel(); 
} 

在我的AlarmReceiver類中,我有以下幾種:

public class AlarmReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); 

     if (alarmUri == null) { 
     alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     } 

     Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri); 
     ringtone.play(); 
    } 
} 

任何想法請爲什麼鈴聲不停止?

+0

你有沒有試過'ringtone.stop();'當你想停止它? –

+0

[如何在android中停止鬧鐘]的可能重複(http://stackoverflow.com/questions/17615986/how-to-stop-an-alarm-in-android) –

回答

0

要正確取消報警,你需要有你的PendingIntent使用FLAG_UPDATE_CURRENT標誌。

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, AlarmReceiver.REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

而且在AlarmReceiver類的開頭添加請求代碼行中,onReceive()前:

public static final int REQUEST_CODE = 222; 

要停止振鈴呼叫stop()的鈴聲點擊停止按鈕時:

Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri); 
ringtone.stop(); 
+0

我嘗試了一切都沒有運氣...你可以調整你的代碼到我的請尼克? –

0

這可能是因爲你沒有在這個問題上粘貼代碼,但我實際上並沒有看到代碼連接stopthealarm到按鈕onclick。你確定停止報警函數觸發器?

你做它setthealarm,但不適用於stopthealarm

setthetime onclick: 

親切的問候

+0

我忘了寫它..按鈕功能正在同時工作 –