私はビデオを記録するアプリに取り組んでいます。ほとんど完了していますが、2.3.3 (API 10) を実行している古い Samsung Galaxy S1 (オーストラリア モデル) で奇妙な問題が発生しています。
向きを設定しようとすると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) を実行している他のデバイスが完全に動作することです。期待どおりに setOrientation() をサポートしていない粗末なカスタム OS を持っているように見えるのは、この Samsung Galaxy s1 だけです。
現在、try {} catch() {}
aroundを使用してい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);
}
...