Android相机setDisplayOrientation失败 [英] Android Camera setDisplayOrientation Failed

查看:273
本文介绍了Android相机setDisplayOrientation失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述





我有一个相机预览作为我正在开发的应用程序的一部分,预览是横向的,所以我打电话给

在$ 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆