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

内蔵カメラを適切に使用する方法を説明するチュートリアルを見つけました。ここにリンクがあります。

私はアンドロイドでは比較的新しいですが、私が読んだことから、ディスプレイが回転するたびに、アンドロイドは何らかの新しいインスタンスを作成します。したがって、回転のインスタンスを保存する必要があり、これは次のコードで行われます。

/**
* 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 に移動する必要があります。ここでの真のヒーローは、カメラの使い方について優れたチュートリアルを行っている Ravi Tamada です。チュートリアル全体を読むことをお勧めします。

繰り返しますが、私はこれに慣れていないので、ここに書いたことに訂正がある場合は訂正してください。

于 2015-01-08T18:26:49.257 に答える
0

確かに答えるのに十分な詳細が定義されていない質問ですが、私の推測はシャニ・ゴリワルと同じです。

向きが変更されるたびに発生する構成変更イベントの問題のようです (横向きから縦向きに)。

次の行をアプリの AndroidManifest に追加してみてください: android:configChanges="orientation|screenSize"

(詳細: http://developer.android.com/guide/topics/resources/runtime-changes.html )

于 2013-07-31T13:47:02.170 に答える