2017-10-28 81 views
0

我正在使用闹钟应用程序。该应用程序开始报警,但不能关闭。警报开启,系统默认警报音。但不能关闭。只有当我强行退出时,铃声才会响起。我在这里使用了切换按钮。报警后点击切换按钮时,我想关闭报警。我使用的代码下面给出:我取消了alarmManager,但没有关闭铃声

MainActivity.java

protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    alarmTimePicker = (TimePicker) findViewById(R.id.timePicker); 
    alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 

} 
public void OnToggleClicked(View view) 
{ 
    long time; 
    if (((ToggleButton) view).isChecked()) 
    { 


     Toast.makeText(MainActivity.this, "ALARM ON", Toast.LENGTH_SHORT).show(); 
     Calendar calendar = Calendar.getInstance(); 
     calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour()); 
     calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute()); 
     Intent intent = new Intent(this, AlarmReceiver.class); 
     pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 

     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); 
    } 
    else 
    { 
     alarmManager.cancel(pendingIntent); 

     Toast.makeText(MainActivity.this, "ALARM OFF", Toast.LENGTH_SHORT).show(); 
    } 
} 

AlarmReceiver.java

public void onReceive(Context context, Intent intent) { 
    Toast.makeText(context, "Alarm! Wake up! Wake up!", Toast.LENGTH_LONG).show(); 
    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

取消报警不会停止铃声你在玩,因为这两件事情无关。您从接收器开始铃声,但是当您取消闹钟或铃声将继续播放时,您必须停止铃声。

{ 
    alarmManager.cancel(pendingIntent); 
    // do something to stop the ringtone here 
    Toast.makeText(MainActivity.this, "ALARM OFF", Toast.LENGTH_SHORT).show(); 
} 
+0

我还建议使用前台服务来停止并启动铃声,而不是从闹钟接收器启动铃声,因为它可以更容易地停止您称为play()的同一个铃声对象实例 – spaceman

相关问题