【问题标题】:MediaControllerCompat - java.lang.IllegalArgumentException: Bad direction 3MediaControllerCompat - java.lang.IllegalArgumentException:方向错误 3
【发布时间】:2017-05-04 13:27:45
【问题描述】:

我正在向我的 mediaControllerCompat 发出一个简单的命令:

controller.adjustVolume(-1, 0);

但我的应用 FC 具有...

java.lang.IllegalArgumentException: Bad direction 3
       at android.os.Parcel.readException(Parcel.java:1469)
       at android.os.Parcel.readException(Parcel.java:1419)
       at android.media.IAudioService$Stub$Proxy.adjustStreamVolume(IAudioService.java:1097)
       at android.media.AudioManager.adjustStreamVolume(AudioManager.java:952)
       at android.support.v4.media.session.MediaSessionCompat$MediaSessionImplBase.adjustVolume(MediaSessionCompat.java:1376)
       at android.support.v4.media.session.MediaSessionCompat$MediaSessionImplBase.access$1700(MediaSessionCompat.java:963)
       at android.support.v4.media.session.MediaSessionCompat$MediaSessionImplBase$MediaSessionStub.adjustVolume(MediaSessionCompat.java:1602)
       at android.support.v4.media.session.MediaControllerCompat$MediaControllerImplBase.adjustVolume(MediaControllerCompat.java:969)
       at android.support.v4.media.session.MediaControllerCompat.adjustVolume(MediaControllerCompat.java:252)
       at pl.qus.xenoamp.NewMainActivity.onKeyDown(NewMainActivity.java:1149)

MainActivity 是上述行的调用者...什么是错误的?!

【问题讨论】:

  • 那么NewMainActivity.java中的第1149行是什么?
  • 如上图所示:controller.adjustVolume(-1,AudioManager.FLAG_SHOW_UI);

标签: android audio


【解决方案1】:

这是 Android 支持库中的一个内部错误,已在 23.1.0 版中得到修复。

上一个答案

这是支持库中的一个错误,它影响使用本地播放的 pre-API 21 设备(即,尚未调用 setPlaybackToRemote()) - 根据 source code 发送到 AudioManager.adjustStreamVolume() 的参数顺序不正确- 因此方向显示为 3 - STREAM_MUSIC 的值。

您可以通过在 API 21 之前的设备上始终调用 setPlaybackToRemote() 来临时解决此问题,传入一个 确实正确调用 AudioManager.adjustStreamVolume()VolumeProviderCompat,但您还必须处理VolumeProviderCompat 的其他方法,例如检索最大音量(通过getStreamMaxVolume())和当前音量(通过getStreamVolume())以及设置音量(通过setStreamVolume())。

【讨论】:

  • 我还对支持库进行了修复,这有望意味着未来的某些版本不会出现此错误。
  • 我明白了。好吧,很高兴知道您知道该错误! (我在我的源代码中留下了一个注释,以便我的孙子可以在修复错误后立即删除解决方法)。
  • 修复现已上线 - 将您的依赖项更新到 23.1.0!
  • 现在你让我为我的讽刺感到非常抱歉!
【解决方案2】:

我在使用 API 23(不是支持库)并在 M 设备上运行时遇到了同样的错误。我通过侦听错误并在必要时调用 API 1 方法来解决它。

try { 
    ...
} catch (IllegalArgumentException e) { 
    audioManager.setStreamVolume(STREAM, VOLUME, FLAGS);
}

由于 Compat 接口调用系统音量控制的内部方法,如果您还没有直接声明一个实例 AudioManager,您也可以实例化一个实例。

【讨论】:

    猜你喜欢
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 2021-04-29
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多