java - 通过闹钟铃声停止设备响铃

标签 java android alarmmanager

我在不同的 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 类来访问您的 RingtoneManagerAudioManager

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/

相关文章:

Java ASM - 如何在方法中创建局部变量

java - Tomcat中级证书 `sec_error_unknown_issuer'

java - 如何修复 Android 中的 RxAndroid 错误

android - Android 网络浏览器上的 <select> 标签问题

android - Alarmmanager.setRepeating 立即触发

java - JUnit 如何测试迭代器

java - 在这种情况下,多个 ifs 和 if-else 之间有什么区别?

android - LLVM 在 Android NDK 工具链中有什么用?

java - Android 通知应用程序无法正常工作

Android:如何从预定的闹钟启动服务?