确定方向时获取屏幕方向

时间:2014-09-09 08:26:42

标签: java android opencv

OpenCV库强制我在android:screenOrientation="landscape"中定义AndroidManifest,以便全屏显示相机。 我想检测我的Android应用程序中的某些对象(基本形式的对象识别)。问题在于,为了检测物体,分析来自摄像机的帧 - 无论电话的方向是什么 - 在景观中。 因此,当您手持纵向模式手机时,图像识别算法不会检测到任何物体,因为它只能以横向模式分析帧。

我想在用户将手机设置为纵向模式时显示Toast,以便他知道图像识别仅适用于横向。但是获取屏幕方向的经典方法(例如使用getResources().getConfiguration().orientation)不会起作用,因为方向在Manifest中固定为横向(因此结果总是ORIENTATION_LANDSCAPE

有没有其他方法可以获得电话的物理方向(即使活动的方向是固定的)?

2 个答案:

答案 0 :(得分:1)

您的活动要捕获此项,但您需要在清单文件中的活动节点添加属性以处理更改。

<activity android:name=".My_Activity"
android:label="@string/app_name"
android:configChanges="orientation">

在你的活动类:

@Override
public void onConfigurationChanged(Configuration myConfig) {
    super.onConfigurationChanged(myConfig);
    int orient = getResources().getConfiguration().orientation; 
    switch(orient) {
                case Configuration.ORIENTATION_LANDSCAPE:
                    //you can remove this case if you want
                    break;
                case Configuration.ORIENTATION_PORTRAIT:
                    //You can give a toast here
                    break;
                default:
                    //take necessary action
                }
}

答案 1 :(得分:1)

简而言之 - 您必须直接使用传感器: Android: get device orientation from Azimuth, roll & pitch

他创建了一个很好的实用工具类: https://gist.github.com/abdelhady/501f6e48c1f3e32b253a#file-deviceorientation