Android:在横向拍照时出错

时间:2013-07-29 09:10:32

标签: android camera photo landscape

我正在尝试使用内置相机应用程序拍摄照片并通过ImageView查看。

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_photo);

    addButtonListeners();
    startCamera();
}

private void startCamera() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, PHOTO_TAKEN);
}

    protected void onActivityResult(int requestCode, int resultCode,
        Intent intent) {
    if (requestCode == PHOTO_TAKEN) {

        Bundle extras = intent.getExtras();
        photo = (Bitmap) extras.get("data");

        if (photo != null) {
            ImageView image = (ImageView) findViewById(R.id.image_background);
            image.setImageBitmap(photo);
        } else {
            Toast.makeText(this, R.string.unable_to_read_photo, Toast.LENGTH_LONG)
                    .show();
        }
    }
}

当手机处于纵向位置时,此代码可以正常工作,但是当我拍摄横向照片时会出现故障,任何想法为何或如何解决?

2 个答案:

答案 0 :(得分:0)

问题没有定义足够的细节来肯定回答,但我的猜测与Shani Goriwal相同。

看起来配置更改事件的问题 - 每次更改方向时都会发生这种情况(从横向到纵向)。

尝试按照以下行添加到您应用的AndroidManifest: 机器人:configChanges = “取向|屏幕尺寸”

(更多详情:http://developer.android.com/guide/topics/resources/runtime-changes.html

答案 1 :(得分:0)

我找到了一个教程,解释了如何正确使用内置摄像头。这是link

我在android上是相对新的但是从我所读到的是每次显示器旋转时android会创建某种新的实例。所以你必须保存旋转的实例,这是通过以下代码完成的:

/**
* Here we store the file url as it will be null after returning from camera
* app
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

// save file url in bundle as it will be null on scren orientation
// changes
outState.putParcelable("file_uri", fileUri);
}

/*
* Here we restore the fileUri again
*/
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    // get the file url
    fileUri = savedInstanceState.getParcelable("file_uri");
}

如果您点击链接,则应转到项目符号11. 在拍摄照片后避免NullPointerException 。这里真正的英雄是Ravi Tamada,他使用相机做了一个很好的教程。我建议阅读整个教程。

我再次对此感到陌生,所以如果对我在此处写的内容有任何更正,请更正。