Как определить программный телефон андроида в беззвучном режиме?

Как определить, находится ли телефон в беззвучном режиме или нет?

Я использую Android 1.5. Я попытался с помощью "android.provider.Settings.ACTION_SOUND_SETTINGS". Это не работает.

3 ответа

Решение

Использовать getRingerMode() метод вAudioManager,

AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

switch (am.getRingerMode()) {
    case AudioManager.RINGER_MODE_SILENT:
        Log.i("MyApp","Silent mode");
        break;
    case AudioManager.RINGER_MODE_VIBRATE:
        Log.i("MyApp","Vibrate mode");
        break;
    case AudioManager.RINGER_MODE_NORMAL:
        Log.i("MyApp","Normal mode");
        break;
}

Следующий код проверяет, не находится ли телефон в беззвучном режиме, затем воспроизводит звуковой сигнал, записанный на kotlin:

    val manager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
    manager.setStreamVolume(AudioManager.STREAM_MUSIC, 10, 0)
    val notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
    val player: MediaPlayer = MediaPlayer.create(applicationContext, notification)
    if(manager.ringerMode != AudioManager.RINGER_MODE_SILENT)
        player.start()

Если вы хотите прослушивать изменения режима звонка, означающие любые изменения в режимах « Без звука» , «Вибрация » или « Нормальный », вы можете настроить широковещательный приемник в своей деятельности, как показано ниже.

         private val volumeKeyReceiver: VolumeKeyReceiver by lazy {
        VolumeKeyReceiver()
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        registerBroadcastListener()
    }

    private fun registerBroadcastListener() {
        val intentFilter = IntentFilter()
        intentFilter.addAction("android.media.RINGER_MODE_CHANGED")
        registerReceiver(volumeKeyReceiver, intentFilter)
    }

и отмените регистрацию, когда действие будет уничтожено, как показано ниже.

       override fun onDestroy() {
        super.onDestroy()
        unregisterReceiver(volumeKeyReceiver)
    }

и зарегистрируйте получателя в манифесте

       <receiver android:name=".VolumeKeyReceiver"/>

здесь идет широковещательный приемник

      class VolumeKeyReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        //Implement Logic
        val audioManager =
            context?.getSystemService(Context.AUDIO_SERVICE) as android.media.AudioManager
        when (audioManager.ringerMode) {
            android.media.AudioManager.RINGER_MODE_SILENT -> Log.d(
                "VolumeKeyReceiver",
                "Silent mode"
            )
            android.media.AudioManager.RINGER_MODE_VIBRATE -> Log.d(
                "VolumeKeyReceiver",
                "Vibrate mode"
            )
            android.media.AudioManager.RINGER_MODE_NORMAL -> Log.d(
                "VolumeKeyReceiver",
                "Normal mode"
            )
        }
    }
}
Другие вопросы по тегам