如何检测音量是否设置为静音?

问题描述 投票:0回答:2

我在开发Android应用程序时,如何检测音量是否设置为静音?

如果音量更改为静音或取消静音,我的应用程序如何收到通知?

android audio volume
2个回答
34
投票

您可以使用AudioManager来检查音量是否静音。

AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
switch( audio.getRingerMode() ){
case AudioManager.RINGER_MODE_NORMAL:
   break;
case AudioManager.RINGER_MODE_SILENT:
   break;
case AudioManager.RINGER_MODE_VIBRATE:
   break;
}

对于音量变化,有广播接收器。

public class VolumeKeyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
       //Implement Logic
    }
}

注册广播接收器

VolumeKeyReceiver keyReceiver = new VolumeKeyReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.media.VOLUME_CHANGED_ACTION");
registerReceiver(keyReceiver, intentFilter);

0
投票

您可以执行以下操作来观察特定流(在本例中为音乐)是否静音:

val Context.musicMutedFlow
    get() = callbackFlow {
        val receiver = object : BroadcastReceiver() {
            override fun onReceive(context: Context, intent: Intent) {
                when (intent.getIntExtra("android.media.EXTRA_VOLUME_STREAM_TYPE", 0)) {
                    AudioManager.STREAM_MUSIC -> trySend(
                        intent.getBooleanExtra(
                            "android.media.EXTRA_STREAM_VOLUME_MUTED",
                            false
                        )
                    )
                }
            }
        }

        registerReceiver(receiver, IntentFilter("android.media.STREAM_MUTE_CHANGED_ACTION"))
        awaitClose { unregisterReceiver(receiver) }
    }

然后,从

ContextWrapper
(例如,
Activity
Service
),您可以按如下方式收集流量:

lifecycleScope.launch {
    musicMutedFlow.collect { Timber.d("Music stream muted: $it") }
}
© www.soinside.com 2019 - 2024. All rights reserved.