Android- Tirar uma foto da frente da câmera gira a foto
Estou criando um aplicativo no android em que o usuário poderá tirar uma foto da câmera frontal apenas no modo retrato. Consegui fixar a visão da câmera para o retrato, mas quando uma foto é tirada, ela aparece girada. O pior é que a direção de rotação é diferente em telefones diferentes, em um telefone ele é girado à direita, enquanto em outro é deixado girado.
Aqui estão meus trechos de código
Para garantir que a atividade seja reproduzida apenas em retrato
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Para buscar a câmera
@Override
public void onResume() {
super.onResume();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
Camera.CameraInfo info=new Camera.CameraInfo();
for (int i=0; i < Camera.getNumberOfCameras(); i++) {
Camera.getCameraInfo(i, info);
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
camera=Camera.open(i);
}
}
}
if (camera == null) {
camera=Camera.open();
}
}
Para girar a câmera
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
if(previewing){
camera.stopPreview();
previewing = false;
}
if (camera != null){
try {
camera.setPreviewDisplay(surfaceHolder);
camera.setDisplayOrientation(90);
initPreview(width, height);
startPreview();
previewing = true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Foto tirada
PictureCallback myPictureCallback_JPG = new PictureCallback(){
@Override
public void onPictureTaken(byte[] data, Camera arg1) {
// new SavePhotoTask().execute(data);
Intent myIntent = new Intent(MainActivity.this, CropActivity.class);
Bitmap bitmap = BitmapFactory.decodeByteArray(data , 0, data .length);
myIntent.putExtra("image", bitmap);
MainActivity.this.startActivity(myIntent);
}};
O envio do BMP está sempre aparecendo na forma girada, mas nem sempre com 90 graus. Parece que o Android 4.0 não apenas gira, mas também vira a imagem. Existe uma boa maneira de detectar e garantir que eu sempre tenha uma imagem correta?