以下のコードで2つの問題があります。カメラアンドロイドのインテントを使用して「onclick」で写真を撮るだけで、ImageViewに画像が表示されます。
- アクティビティを終了せずに 2 枚または 3 枚の写真を撮った後、ディスプレイを回転させているときに outOfMemory エラーでクラッシュすることがよくあります。
- 初めて写真を撮るときはイメージビューが更新されますが、2回目または3回目は...画面を回転するまで画像が更新されません
外部ストレージではなく内部ストレージに画像を保存したいのですが、いくつかのチュートリアルを試したところ、カメラがスタックしてしまうため、その方法がわかりません!
public class HandScryActivity extends Activity {
private static int TAKE_PICTURE = 1; private MtgMatch myMatch; private File handFile; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.handscry); // Disable screen saver getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON); // Load match myMatch = MtgMatch.getSingletonMtgMatch(); handFile = new File(Environment.getExternalStorageDirectory(), "test.jpg"); if (myMatch.getHandUri() != null) { loadPicture(); } } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); loadPicture(); } // Handles onGame clicked buttons public void btnHandClick(View v) { Button clickedButton = (Button) v; // according to clicked button switch (clickedButton.getId()) { case R.id.btnBackToGame: this.finish(); break; case R.id.btnTakePicture: myMatch.setHandUri(Uri.fromFile(handFile)); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, myMatch.getHandUri()); startActivityForResult(intent, TAKE_PICTURE); break; default: break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == TAKE_PICTURE) { // Display image if (resultCode == RESULT_OK) { loadPicture(); } else if (resultCode == RESULT_CANCELED) { // User cancelled the image capture } else { // Image capture failed, advise user } } } // Put the photo inside frame private void loadPicture() { ImageView img = (ImageView) findViewById(R.id.imgHand); img.setImageURI(myMatch.getHandUri()); } }