我有一个应用程序,我只想在横向模式下运行(例如横向或反向横向),所以我在清单中使用sensorLandscape。
我的问题在这里: 我也有录像机工作(例如使用相机)。现在我在准备相机时设置显示方向,但问题是如果我改变方向,则更改保持不变(预览是颠倒的)。使用传感器格局时,如何知道UI何时更改。我尝试过使用onConfigurationCanged(),但遗憾的是我需要在预蜂窝设备(主要是姜饼)和后蜂窝设备(果冻豆)上运行应用程序。
由于为了正确地调用onConfigurationChanged,我需要将目标api设置为8,但传感器格局只有9+可用。我需要将它设置为8,因为在较旧的api中你需要将screenSize添加到“configChanges”,否则它将不会被调用。所以这些调用之间有很多不相容的东西。
现在已经完成了背景,你们知道我已经尝试了什么。我的问题是 我怎样才能知道我的方向何时发生变化(回调或其他),以便我可以更改我的相机显示方向?
提前谢谢。
答案 0 :(得分:3)
我已经想出如何完成这项工作。这是一个圆形的方式,但在这里是: 设置传感器管理器和炼油器
public class ActivityRecordVideo extends ActivityBase implements SensorEventListener
{
private SensorManager mSensorManager;
private Sensor mOrientation;
@Override
public void onCreate(Bundle savedInstanceState)
{
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mOrientation = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
}
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
public void onSensorChanged(SensorEvent event) {
int rotation = getWindowManager().getDefaultDisplay().getRotation();
if(camId != -1 && currentDisplayRotation != rotation)
{
if(!isRecording)
setCameraOrientation(camId, cameraRecorder);
}
}
我还在onResume()中设置了侦听器,并在onPause()中删除它们。
这允许相机方向与其他所有内容一起翻转(例如,在反向横向时,所有视图都与相机预览一起反向横向)
还决定显示setCameraOrientation代码,它是android开发者代码的规定版本
private void setCameraOrientation(int camId, Camera camera)
{
CameraInfo info = new CameraInfo();
Camera.getCameraInfo(camId, info);
currentDisplayRotation = getWindowManager().getDefaultDisplay().getRotation();
int degrees = 0;
switch(currentDisplayRotation)
{
case Surface.ROTATION_0: degrees = 0; break;
case Surface.ROTATION_90: degrees = 90; break;
case Surface.ROTATION_180: degrees = 180; break;
case Surface.ROTATION_270: degrees = 270; break;
}
int result;
result = (info.orientation + degrees) % 360;
result = (360 - result) % 360; //compensate for mirror effect
if(Build.VERSION.SDK_INT < 14)
camera.stopPreview();
camera.setDisplayOrientation(result);
if(Build.VERSION.SDK_INT < 14)
camera.startPreview();
}
希望这会有助于其他人