Android相机setDisplayOrientation失败 [英] Android Camera setDisplayOrientation Failed
问题描述
我有一个相机预览作为我正在开发的应用程序的一部分,预览是横向的,所以我打电话给
在$ pre> onResume()
方法中的camera.setDisplayOrientation(90);
。我为用户提供了重新拍摄图像的选项,因此当他们再次返回时,它再次调用
onResume()
。我已经在nexus10上测试了这个并没有问题,但是,当它在运行froyo 2.2的设备上运行时,它是一个htc手机,应用程序崩溃了我得到了这个
07-26 12:19:43.389:E / AndroidRuntime(2245):致命异常:主
07-26 12:19:43.389:E / AndroidRuntime(2245):java .lang.RuntimeException:set display orientation failed
07-26 12:19:43.389:E / AndroidRuntime(2245):at android.hardware.Camera.setDisplayOrientation(Native Method)
07-26 12: 19:43.389:E / AndroidRuntime(2245):at com.purple.reepfragment.SnapFragment.onResume(SnapFragment.java:114)
07-26 12:19:43.389:E / AndroidRuntime(2245):at android .support.v4.app.Fragment.performResume(Fragment.java:1503)
07-26 12:19:43.389:E / AndroidRuntime(2245):at android.support.v4.app.FragmentManagerImpl.moveToState( FragmentManager.java:947)
07-26 12:19:43.389:E / AndroidRuntime(2245):at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
07-26 12:19:43.389:E / AndroidRuntime(2245):在android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
07-26 12:19:43.389:E / AndroidRuntime(2245):在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
07-26 12:19:43.389:E / AndroidRuntime(2245):在android.support。 v4.app.FragmentManagerImpl $ 1.run(FragmentManager.java:429)
07-26 12:19:43.389:E / AndroidRuntime(2245):at android.os.Handler.handleCallback(Handler.java:587)
07-26 12:19:43.389:E / AndroidRuntime(2245):在android.os.Handler.dispatchMessage(Handler.java:92)
07-26 12:19:43.389:E / AndroidRuntime(2245):在android.os.Looper.loop(Looper.java:144)
07-26 12:19:43.389:E / AndroidRuntime(2245):在android.app.ActivityThread.main(ActivityThread) .java:4937)
07-26 12:19:43.389:E / AndroidRuntime(2245):at java.lang.reflect.Method.invokeNative(Native Method)
07-26 12:19: 43.389:E / AndroidRuntime(2245):at java.lang.reflect.Method.invoke(Method .java:521)
07-26 12:19:43.389:E / AndroidRuntime(2245):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:858)
07-26 12:19:43.389:E / AndroidRuntime(2245):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
07-26 12:19:43.389:E / AndroidRuntime(2245):at dalvik.system.NativeStart.main(Native Method)
我真的我正在努力弄清楚问题是什么,因为Froyo支持setDisplayOrientation ...
任何人都有任何想法或者之前遇到过这个问题吗?
1.run(FragmentManager.java:429)
07-26 12:19:43.389:E / AndroidRuntime(2245):在android.os.Handler.handleCallback(Handler.java:587) )
07-26 12:19:43.389:E / AndroidRuntime(2245):在android.os.Handler.dispatchMessage(Handler.java:92)
07-26 12:19:43.389:E / AndroidRuntime(2245):在android.os.Looper.loop(Looper.java:144)
07-26 12:19:43.389:E / AndroidR untime(2245):在android.app.ActivityThread.main(ActivityThread.java:4937)
07-26 12:19:43.389:E / AndroidRuntime(2245):at java.lang.reflect.Method.invokeNative (原生方法)
07-26 12:19:43.389:E / AndroidRuntime(2245):at java.lang.reflect.Method.invoke(Method.java:521)
07-26 12: 19:43.389:E / AndroidRuntime(2245):at com.android.internal.os.ZygoteInit
MethodAndArgsCaller.run(ZygoteInit.java:858)
07-26 12 :19:43.389:E / AndroidRuntime(2245):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
07-26 12:19:43.389:E / AndroidRuntime(2245) :at dalvik.system.NativeStart.main(Native Method)
我真的很难想象问题是什么因为Froyo支持setDisplayOrientation ...
任何人都有任何想法或者之前遇到过这个问题吗?
尝试自己的类似的方法..
protected void setDisplayOrientation(相机相机, int angle){
Method downPolymorphic ;
尝试
{
downPolymorphic = camera.getClass()。getMethod( setDisplayOrientation, new 类[] { int 。 class });
if (downPolymorphic!= null)
downPolymorphic.invoke(camera, new Object [] {angle});
}
catch (例外e1)
{
}
}
而不是使用 camera.setDisplayOrientation(x)使用 setDisplayOrientation(camera,x)之类的,
< pre lang =java> if (Integer.parseInt(Build.VERSION.SDK)> = 8 )
setDisplayOrientation(mCamera, 90 );
else
{
if (getResources()。getConfiguration( ).orientation == Configuration.ORIENTATION_PORTRAIT)
{
p.set( orientation, portrait);
p.set( rotation, 90 跨度>);
}
if (getResources()。getConfiguration()。orientation == Configuration.ORIENTATION_LANDSCAPE)
{
p .set( orientation, landscape);
p.set( rotation, 90 跨度>);
}
}
Hi,
I have a camera preview as part of an application I am developing, the preview is in landscape, so I call
camera.setDisplayOrientation(90);
in the
onResume()
method. I give the user an option to retake the image, so when they go back again, it calls the
onResume()
again. I have tested this on the nexus10 and there are no problems, however, when running it on a device running froyo 2.2, it's a htc handset, the app crashes and I get this
07-26 12:19:43.389: E/AndroidRuntime(2245): FATAL EXCEPTION: main 07-26 12:19:43.389: E/AndroidRuntime(2245): java.lang.RuntimeException: set display orientation failed 07-26 12:19:43.389: E/AndroidRuntime(2245): at android.hardware.Camera.setDisplayOrientation(Native Method) 07-26 12:19:43.389: E/AndroidRuntime(2245): at com.purple.reepfragment.SnapFragment.onResume(SnapFragment.java:114) 07-26 12:19:43.389: E/AndroidRuntime(2245): at android.support.v4.app.Fragment.performResume(Fragment.java:1503) 07-26 12:19:43.389: E/AndroidRuntime(2245): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947) 07-26 12:19:43.389: E/AndroidRuntime(2245): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 07-26 12:19:43.389: E/AndroidRuntime(2245): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 07-26 12:19:43.389: E/AndroidRuntime(2245): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 07-26 12:19:43.389: E/AndroidRuntime(2245): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429) 07-26 12:19:43.389: E/AndroidRuntime(2245): at android.os.Handler.handleCallback(Handler.java:587) 07-26 12:19:43.389: E/AndroidRuntime(2245): at android.os.Handler.dispatchMessage(Handler.java:92) 07-26 12:19:43.389: E/AndroidRuntime(2245): at android.os.Looper.loop(Looper.java:144) 07-26 12:19:43.389: E/AndroidRuntime(2245): at android.app.ActivityThread.main(ActivityThread.java:4937) 07-26 12:19:43.389: E/AndroidRuntime(2245): at java.lang.reflect.Method.invokeNative(Native Method) 07-26 12:19:43.389: E/AndroidRuntime(2245): at java.lang.reflect.Method.invoke(Method.java:521) 07-26 12:19:43.389: E/AndroidRuntime(2245): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 07-26 12:19:43.389: E/AndroidRuntime(2245): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 07-26 12:19:43.389: E/AndroidRuntime(2245): at dalvik.system.NativeStart.main(Native Method)
I really am struggling to figure out what the problem is as setDisplayOrientation is supported in Froyo...
Would anyone have any ideas or have come across this before??
1.run(FragmentManager.java:429) 07-26 12:19:43.389: E/AndroidRuntime(2245): at android.os.Handler.handleCallback(Handler.java:587) 07-26 12:19:43.389: E/AndroidRuntime(2245): at android.os.Handler.dispatchMessage(Handler.java:92) 07-26 12:19:43.389: E/AndroidRuntime(2245): at android.os.Looper.loop(Looper.java:144) 07-26 12:19:43.389: E/AndroidRuntime(2245): at android.app.ActivityThread.main(ActivityThread.java:4937) 07-26 12:19:43.389: E/AndroidRuntime(2245): at java.lang.reflect.Method.invokeNative(Native Method) 07-26 12:19:43.389: E/AndroidRuntime(2245): at java.lang.reflect.Method.invoke(Method.java:521) 07-26 12:19:43.389: E/AndroidRuntime(2245): at com.android.internal.os.ZygoteInit
MethodAndArgsCaller.run(ZygoteInit.java:858) 07-26 12:19:43.389: E/AndroidRuntime(2245): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 07-26 12:19:43.389: E/AndroidRuntime(2245): at dalvik.system.NativeStart.main(Native Method)
I really am struggling to figure out what the problem is as setDisplayOrientation is supported in Froyo...
Would anyone have any ideas or have come across this before??
Try with your own method like..
protected void setDisplayOrientation(Camera camera, int angle){ Method downPolymorphic; try { downPolymorphic = camera.getClass().getMethod("setDisplayOrientation", new Class[] { int.class }); if (downPolymorphic != null) downPolymorphic.invoke(camera, new Object[] { angle }); } catch (Exception e1) { } }
And instead of using camera.setDisplayOrientation(x) use setDisplayOrientation(camera, x) like,
if (Integer.parseInt(Build.VERSION.SDK) >= 8) setDisplayOrientation(mCamera, 90); else { if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { p.set("orientation", "portrait"); p.set("rotation", 90); } if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { p.set("orientation", "landscape"); p.set("rotation", 90); } }
这篇关于Android相机setDisplayOrientation失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!