MediaControllerCompat - java.lang.IllegalArgumentException:错误的方向3

时间:2015-10-01 09:07:47

标签: android audio

我向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是上述行的来电者......什么是错误的?!

2 个答案:

答案 0 :(得分:1)

这是Android支持库中的内部错误,自版本23.1.0起已修复。

上一个答案

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

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

答案 1 :(得分:0)

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

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

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