IllegalArgumentException:错误的流类型21

时间:2015-03-30 17:03:20

标签: android android-audiomanager

我有时会在playStore上遇到异常。它出现在不同的设备上,也出现在不同的Android版本上。我在测试期间从未遇到过这样的错误,也无法产生错误。 getStreamVolume会出现什么问题?

java.lang.IllegalArgumentException: Bad stream type 21
at android.os.Parcel.readException(Parcel.java:1326)
at android.os.Parcel.readException(Parcel.java:1276)
at android.media.IAudioService$Stub$Proxy.getStreamVolume(IAudioService.java:508)
at android.media.AudioManager.getStreamVolume(AudioManager.java:487)
at de.free.Activity.startStopService(Activity.java:452)
at de.free.Activity.onClick(Activity.java:409)
at android.view.View.performClick(View.java:2506)
at android.widget.CompoundButton.performClick(CompoundButton.java:99)
at android.view.View$PerformClick.run(View.java:9112)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3835)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at dalvik.system.NativeStart.main(Native Method)

来自Method startStopService的代码:

private void startStopService() {
    long now = new Date().getTime();

    Intent i = new Intent(this, AppService.class);

    i.putExtra(AppService.VOLUME, volumeBar.getProgress());
    i.putExtra(AppService.RINGER, amanager.getRingerMode());
    i.putExtra(AppService.ACT_VOL, amanager.getStreamVolume(amanager.getStreamVolume(AudioManager.STREAM_RING)));
    i.putExtra(AppService.VOL_ALM, amanager.getStreamVolume(amanager.getStreamVolume(AudioManager.STREAM_ALARM)));
    i.putExtra(AppService.TIME_NOW, now);

    PendingIntent pi = PendingIntent.getService(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);   

    if((tb_runBG.isChecked())) {        
        alarmManager.cancel(pi);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 *update_time, pi);    
    } else {
        alarmManager.cancel(pi);
        stopService(new Intent(this, AppService.class));    
    }
}

onCreate上的AudioManager:

//sets the range between 0 and the max volume
volumeBar.setMax(amanager.getStreamMaxVolume(AudioManager.STREAM_RING));

1 个答案:

答案 0 :(得分:1)

我认为它是硬件问题,将您的代码放入try / catch代码

try{
    //sets the range between 0 and the max volume
    volumeBar.setMax(amanager.getStreamMaxVolume(AudioManager.STREAM_RING));
 }catch(IllegalArgumentException e){}

检查this

AFAIK - 为了防止你身边发生崩溃,对于设备重启不是你的一面,所以我很抱歉你无法解决这个问题,错误正在转移到三星和lG-(制造商)。所以,设备可能会重新启动它,至少你会通过放置一个try / catch块来说服用户不是你的错,但如果没有,那么用户会把责任归咎于你,就像你的应用程序崩溃时一样。如果你读帖子实际上解决方案是放一个try / catch块或返回0或任何东西,所以我认为这是你最好的选择。

希望它有所帮助。