Java 通过报警铃声停止设备铃声

Java 通过报警铃声停止设备铃声,java,android,alarmmanager,Java,Android,Alarmmanager,我在不同的活动中按响我的设备,并在不同的活动中停止它。 但问题是,设备铃声是在同一活动中启动和停止的,而不是在不同的活动中停止的 代码是 Ringtone ringtone; ringtone = RingtoneManager.getRingtone(mContext.getApplicationContext(), RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE));

我在不同的活动中按响我的设备,并在不同的活动中停止它。 但问题是,设备铃声是在同一活动中启动和停止的,而不是在不同的活动中停止的

代码是

     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
类访问
ringtonemager
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
,因为即使用户停止通知或其他地方,音乐也应该停止,我创建了一个
服务
,并使用单例实例来
播放、暂停、停止

编辑1

您删除静默模式的代码在我看来很好,不在静默模式下播放警报肯定有其他问题

这是静音模式下声音的替代解决方案

为了消除静音/振动模式,我将Alert Audio用作
MediaPlayer
,因为即使手机处于
DND
模式,也可以播放音乐/媒体,因此我创建了一个紧急警报应用程序,该应用程序仅在出现紧急情况和执行某些其他
特定操作时才会发出声音

audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 20, 0);

希望这会有帮助

嘿,你能告诉我当设备处于静默模式时如何拨打电话吗。。。