我在其他活动中给设备打电话,并在其他活动中将其停止。 但是问题在于设备振铃是在相同活动中开始和停止,而在不同活动中没有停止。
代码是
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
还有其他方法可以强制停止设备中的所有响铃。
答案 0 :(得分:6)
如果所有活动中的振铃都相同,建议您使用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;
}
}
现在在“活动”中使用类似的内容
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实例用于{{1} }等。
Learn more about Singleton Classes here!
编辑1
您删除静默模式的代码在我看来还不错,关于闹钟不在静默模式下播放肯定有其他问题
这是静音模式下声音的替代解决方案。
为了消除静音/振动模式,我将警报音频用作Play, Pause, Stop
,因为即使手机处于MediaPlayer
模式也可以播放音乐/媒体,所以我创建了一个紧急警报应用程序,它将使仅在紧急情况下执行其他DND
时才发出声音。
Certain Action
希望这会有所帮助!