我在不同的 Activity 中响铃我的设备并在不同的 Activity 中停止它。 但问题是设备铃声在同一 Activity 中开始和停止,但在不同的 Activity 中没有停止。
代码是
Ringtone ringtone;
ringtone = RingtoneManager.getRingtone(mContext.getApplicationContext(),
RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE));
AudioManager audioManager = (AudioManager) mContext.getApplicationContext().getSystemService(AUDIO_SERVICE);
int volume = audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM);
audioManager.setStreamVolume(AudioManager.STREAM_ALARM, volume, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
ringtone.setStreamType(AudioManager.STREAM_ALARM);
ringtone.stop(); //ringing is not stoping
有没有其他方法可以强制停止我的设备中的所有铃声..
最佳答案
如果所有 Activity 中的铃声都相同,我建议您使用 Singleton
类来访问您的 RingtoneManager
和 AudioManager
public class Utilities {
// static variable of Ringtone
private static Ringtone mRingtone = null;
// static variable of AudioManager
private static AudioManager mAudioManager = null;
// static method to get instance of Ringtone
public static Rington getRingtone(Context mContext) {
if (mRingtone == null) {
mRingtone = RingtoneManager.getRingtone(mContext.getApplicationContext(),
RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE));
}
return mRingtone;
}
// static method to get instance of AudioManager
public static AudioManager getAudioManager(Context mContext) {
if (mAudioManager == null) {
mAudioManager = mContext.getApplicationContext().getSystemService(AUDIO_SERVICE);
}
return mAudioManager;
}
}
现在在您的 Activity 中使用类似的内容
Ringtone ringtone = Utilities.getRingtone(this)
AudioManager audioManager = Utilities.getAudioManager(this);
int volume = audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM);
audioManager.setStreamVolume(AudioManager.STREAM_ALARM, volume, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
ringtone.setStreamType(AudioManager.STREAM_ALARM);
ringtone.stop(); //this will stop ringing
我还做了类似的事情来创建一个musicPlayer
,因为即使用户通过通知或其他地方停止音乐,音乐也应该停止,我创建了一个服务
并使用了Singleton 播放、暂停、停止
等实例。
Learn more about Singleton Classes here!
编辑 1
您用于删除静音模式的代码对我来说看起来不错,闹钟不在静音模式下播放肯定还有其他问题
这是静音模式下声音的替代解决方案。
为了消除静音/振动模式,我将警报音频用作MediaPlayer
,因为即使手机处于DND
模式下也可以播放音乐/媒体,我创建了一个紧急情况警报应用程序,仅在发生紧急情况并执行某些其他某些操作
时才会发出声音。
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 20, 0);
希望这会有所帮助!
关于java - 通过闹钟铃声停止设备响铃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59150796/