通过闹钟铃声停止设备响铃
Stop Device ringing through Alarm Ringtone
我在不同的 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
有没有其他方法可以强制停止我设备中的所有响铃..
如果所有活动的铃声都相同,我建议您使用 Singleton
class 访问您的 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
,因为即使用户从通知或其他地方停止音乐也应该停止,我创建了一个 service
并使用 Singleton 实例来 Play, Pause, Stop
等,
Learn more about Singleton Classes here!
编辑 1
你的移除静音模式的代码在我看来没问题,闹钟在静音模式下不播放肯定有其他问题
这是静音模式下声音的替代解决方案。
为了移除 silence/vibration 模式,我将警报音频用作 MediaPlayer
因为即使 phone 处于 DND
模式也可以播放 music/media,我创建了一个紧急警报应用程序,只有在出现紧急情况时才会发出声音,并且执行其他一些Certain Action
。
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 20, 0);
希望这会有所帮助!
我在不同的 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
有没有其他方法可以强制停止我设备中的所有响铃..
如果所有活动的铃声都相同,我建议您使用 Singleton
class 访问您的 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
,因为即使用户从通知或其他地方停止音乐也应该停止,我创建了一个 service
并使用 Singleton 实例来 Play, Pause, Stop
等,
Learn more about Singleton Classes here!
编辑 1
你的移除静音模式的代码在我看来没问题,闹钟在静音模式下不播放肯定有其他问题
这是静音模式下声音的替代解决方案。
为了移除 silence/vibration 模式,我将警报音频用作 MediaPlayer
因为即使 phone 处于 DND
模式也可以播放 music/media,我创建了一个紧急警报应用程序,只有在出现紧急情况时才会发出声音,并且执行其他一些Certain Action
。
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 20, 0);
希望这会有所帮助!