0

我正在尝试使用内置的相机应用程序拍摄照片并通过 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();
        }
    }
}

当将手机保持在纵向位置时,此代码可以正常工作,但是当我以横向方式拍照时它会中断,有什么想法为什么或如何解决这个问题?

4

2 回答 2

0

我找到了一个教程,解释了如何正确使用内置相机。这是链接

我在 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,他在使用相机方面做了出色的教程。我建议阅读整个教程。

同样,我是新来的,所以如果对我在这里写的内容有任何更正,请更正。

于 2015-01-08T18:26:49.257 回答
0

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

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

尝试在您的应用程序的 AndroidManifest 中添加以下行: android:configChanges="orientation|screenSize"

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

于 2013-07-31T13:47:02.170 回答