首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin.Android:如何躲避音频?

Xamarin.Android:如何躲避音频?
EN

Stack Overflow用户
提问于 2018-05-07 21:25:52
回答 1查看 350关注 0票数 0

我正在开发一个Xamarin.Forms应用程序,在iOS中,我可以通过以下代码来回避音频:

代码语言:javascript
复制
AVAudioSession.SharedInstance().SetCategory(AVAudioSessionCategory.Playback, AVAudioSessionCategoryOptions.DuckOthers);

Android的等价物是什么?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-05-08 16:02:14

我解决了在Droid项目上创建一个类的问题,如下所示:

代码语言:javascript
复制
class NotificationManager
{
    static public Android.Media.AudioManager audioManager = null;
    static Activity mainActivity = null;

    public static Activity MainActivity
    {
        set { mainActivity = value; }
    }

    Android.Media.AudioManager.IOnAudioFocusChangeListener listener = null;

    private class FocusChangeListener : Java.Lang.Object, Android.Media.AudioManager.IOnAudioFocusChangeListener
    {
        public void OnAudioFocusChange(AudioFocus focusChange)
        {
            switch (focusChange)
            {
                // We will take any flavor of AudioFocusgain that the system gives us and use it.
                case AudioFocus.GainTransient:
                case AudioFocus.GainTransientMayDuck:
                    break;
                case AudioFocus.Gain:
                    break;
                // If we get any notificationthat removes focus - just terminate what we were doing.
                case AudioFocus.LossTransientCanDuck:
                    break;
                case AudioFocus.LossTransient:
                case AudioFocus.Loss:
                    break;
                default:
                    break;
            }
        }
    }

    public Boolean RequestAudioResources()
    {
        listener = new FocusChangeListener();

        var ret = audioManager.RequestAudioFocus(listener, Stream.Music, AudioFocus.GainTransientMayDuck);
        if (ret == AudioFocusRequest.Granted)
        {
            return (true);
        }
        else if (ret == AudioFocusRequest.Failed)
        {
            return (false);
        }
        return (false);
    }

    public void ReleaseAudioResources()
    {
        if (listener != null)
            audioManager.AbandonAudioFocus(listener);
    }
}

然后在我设置的MainActivity中:

代码语言:javascript
复制
NotificationManager.audioManager = (Android.Media.AudioManager)GetSystemService(Context.AudioService);
NotificationManager.MainActivity = this;

此时,我可以通过调用RequestAudioResources()和ReleaseAudioResources()方法来管理音频。

当音频焦点改变时,将调用OnAudioFocusChange()方法,您可以执行更多操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50215384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档