1

我正在研究一个记录视频的应用程序。它大部分都是完整的,但我在运行2.3.3(API 10)的较旧的三星Galaxy S1(澳大利亚模式)中遇到了一个奇怪的问题。检查setOrientation()是否受支持?

当我尝试通过mMediaRecorder.setOrientationHint(90);设置方向它抛出一个异常:

05-28 10:46:53.628: E/AndroidRuntime(6373): java.lang.RuntimeException: setParameter failed. 

连同:

05-28 10:46:53.593: E/MediaRecorder(6373): setParameters(video-param-rotation-angle-degrees=90) failed: -2147483648 

什么奇怪的是,运行3.2.2(API 10)其他设备的工作完全是只有这个三星银河s1似乎有一个混乱的自定义操作系统,不支持setOrientation()的预期。我正在使用try {} catch() {}setOrientation()。它不是一个处理这种权利的优雅方式?预先检查设备是否支持setOrientation()然后尝试设置是否更好?我无法找到任何检查此支持的方式。

我检查了(http://developer.android.com/reference/android/media/MediaRecorder.html),除了我已经使用的API级别9之外,找不到帮助。即,只尝试设置方向,如果API 9级或更高

这里是整个例外:

05-28 10:46:53.593: E/MediaRecorder(6373): setParameters(video-param-rotation-angle-degrees=90) failed: -2147483648 
05-28 10:46:53.593: W/dalvikvm(6373): threadid=1: thread exiting with uncaught exception (group=0x40015578) 
05-28 10:46:53.628: E/AndroidRuntime(6373): FATAL EXCEPTION: main 
05-28 10:46:53.628: E/AndroidRuntime(6373): java.lang.RuntimeException: setParameter failed. 
05-28 10:46:53.628: E/AndroidRuntime(6373):  at android.media.MediaRecorder.setParameter(Native Method) 
05-28 10:46:53.628: E/AndroidRuntime(6373):  at android.media.MediaRecorder.setOrientationHint(MediaRecorder.java:341) 
05-28 10:46:53.628: E/AndroidRuntime(6373):  at com.on3x.emergency.Recorder.prepareVideoRecorder(Recorder.java:223) 
05-28 10:46:53.628: E/AndroidRuntime(6373):  at com.on3x.emergency.Recorder.startRecording(Recorder.java:104) 
05-28 10:46:53.628: E/AndroidRuntime(6373):  at com.on3x.emergency.GUI.RecordActivity$1.onClick(RecordActivity.java:111) 
05-28 10:46:53.628: E/AndroidRuntime(6373):  at android.view.View.performClick(View.java:2538) 
05-28 10:46:53.628: E/AndroidRuntime(6373):  at android.view.View$PerformClick.run(View.java:9152) 
05-28 10:46:53.628: E/AndroidRuntime(6373):  at android.os.Handler.handleCallback(Handler.java:587) 
05-28 10:46:53.628: E/AndroidRuntime(6373):  at android.os.Handler.dispatchMessage(Handler.java:92) 
05-28 10:46:53.628: E/AndroidRuntime(6373):  at android.os.Looper.loop(Looper.java:123) 
05-28 10:46:53.628: E/AndroidRuntime(6373):  at android.app.ActivityThread.main(ActivityThread.java:3687) 
05-28 10:46:53.628: E/AndroidRuntime(6373):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-28 10:46:53.628: E/AndroidRuntime(6373):  at java.lang.reflect.Method.invoke(Method.java:507) 
05-28 10:46:53.628: E/AndroidRuntime(6373):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
05-28 10:46:53.628: E/AndroidRuntime(6373):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
05-28 10:46:53.628: E/AndroidRuntime(6373):  at dalvik.system.NativeStart.main(Native Method) 

这里是实际设置代码:

... 
    if (android.os.Build.VERSION.SDK_INT>=9) { 
     // attempt to rotate the video 90 degrees. 
     try { 
      mMediaRecorder.setOrientationHint(90); 
      Utils.logLine("orientation rotated 90", this, Utils.LOG_TYPE_DEBUG); 
     } catch (Exception e) { 
      Utils.logLine("error trying setOrientationHint"+ e.getMessage(), this, Utils.LOG_TYPE_ERROR, e); 
     }   
    } else { 
     Utils.logLine("orientation set skipped ", this, Utils.LOG_TYPE_DEBUG); 
    }  
... 

回答

0

如果你有信心,只有有限数量的设备可以用此命令进行定制,您可以通过checking their type of device进行抢先检查。否则trycatch块是处理它的唯一方法。

+0

嗯检查设备可能是我现在唯一的选择。然后,我可以修改try catch来通知我任何其他设备,通过更新它的详细信息到服务器,我不能使用'setOrientation()',然后我可以添加到If语句来检查设备类型...我会必须研究它 – wired00