OpenCV库强制我在android:screenOrientation="landscape"
中定义AndroidManifest
,以便全屏显示相机。
我想检测我的Android应用程序中的某些对象(基本形式的对象识别)。问题在于,为了检测物体,分析来自摄像机的帧 - 无论电话的方向是什么 - 在景观中。
因此,当您手持纵向模式手机时,图像识别算法不会检测到任何物体,因为它只能以横向模式分析帧。
我想在用户将手机设置为纵向模式时显示Toast,以便他知道图像识别仅适用于横向。但是获取屏幕方向的经典方法(例如使用getResources().getConfiguration().orientation
)不会起作用,因为方向在Manifest中固定为横向(因此结果总是ORIENTATION_LANDSCAPE
)
有没有其他方法可以获得电话的物理方向(即使活动的方向是固定的)?
答案 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