问题:180上下切换屏幕时却不会触发onConfigurationChanged
做摄像头拍照功能时,经常需要切换屏幕方向。
横竖屏切换时我们可以通过onConfigurationChanged监听,然后动态去设置方向
public static void setCameraDisplayOrientation (Activity activity, int cameraId, android.hardware.Camera camera) {
android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo (cameraId , info);
int rotation = activity.getWindowManager ().getDefaultDisplay ().getRotation ();
int degrees = 0;
switch (rotation) {
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;
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
result = (info.orientation + degrees) % 360;
result = (360 - result) % 360; // compensate the mirror
} else {
// back-facing
result = ( info.orientation - degrees + 360) % 360;
}
camera.setDisplayOrientation (result);
}
但是当我们180上下切换屏幕时却不会触发onConfigurationChanged事件,一开始我使用方向传感器监听
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mOrientation = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
@Override
public void onSensorChanged(SensorEvent event){
int rotation = getWindowManager().getDefaultDisplay().getRotation();
if(rotation != oldOrientation){
cameraManager.setoriention();
}
oldOrientation = rotation;
}
我试了之后有的手机成功了,但有的出现问题了mOrientation为空,而且Sensor.TYPE_ORIENTATION已经过时了,
最后使用
mOrientation = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
accsensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if(mOrientation!=null){
mSensorManager.registerListener(this, mOrientation, SensorManager.SENSOR_DELAY_FASTEST);
}
if(accsensor!=null){
mSensorManager.registerListener(this, accsensor, SensorManager.SENSOR_DELAY_FASTEST);
}
成功了