通过闹钟铃声停止设备振铃

3 java android alarmmanager

我在不同的活动中响铃我的设备并在不同的活动中停止它。但问题是设备振铃在同一活动中开始和停止,但不会在不同的活动中停止。

代码是

     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

Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以强行停止我的设备中的所有铃声..

Rah*_*aur 5

如果所有活动中的铃声都相同,我建议您使用Singletonclass 来访问您的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; 

   } 
}
Run Code Online (Sandbox Code Playgroud)

现在在你的活动中使用这样的东西

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
Run Code Online (Sandbox Code Playgroud)

我也做了类似的事情来创建 a musicPlayer,因为即使用户从通知或其他地方停止音乐,音乐也应该停止,我创建了 aservice并使用了单例实例Play, Pause, Stop等等。

在此处了解有关单例类的更多信息!

编辑 1

您删除静音模式的代码对我来说看起来不错,闹钟在静音模式下不播放一定有其他问题

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

为了消除静音/振动模式,我使用了警报音频,MediaPlayer因为即使手机处于开启DND模式也可以播放音乐/媒体,我创建了一个紧急警报应用程序,它只会在出现紧急情况时发出声音,并且Certain Action执行其他一些操作。

audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 20, 0);
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助!