0

カメラの意図に問題があります。写真はストレージに保存されますが、アクティビティへのファイル パスは返されません。EXTRA_OUTPUT を削除すると、ファイル パスが返されますが、画像のサイズが非常に小さくなります。EXTRA_OUTPUT を使用せずに元のサイズの写真を取得する解決策はありますか?

これが私のコードです:

   public void onClick(View arg0) {
    switch (arg0.getId()) {     
     case R.id.btnImageCapture:
       preinsertedUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues());
        Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, preinsertedUri);
         startActivityForResult(intent, OPEN_CAMERA);
       break;
       }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     super.onActivityResult(requestCode, resultCode, data);
     switch(requestCode){
     case OPEN_CAMERA:
         if (resultCode == RESULT_OK && data != null) {
                  Uri imageUri = null;
                  imageUri = data.getData();
                 if(imageUri == null && preinsertedUri != null){
                  imageUri = preinsertedUri;
                 }
                  String[] filePathColumn = { MediaStore.Images.Media.DATA };
                  Cursor cursor = getContentResolver().query(imageUri, filePathColumn, null, null, null);
                  int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                  cursor.moveToFirst();
                  filePath = cursor.getString(columnIndex);
                try {
                 Bitmap photo = (Bitmap) data.getExtras().get("data");
                 ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                 photo.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
                         File f = new File(filePath);
                         f.createNewFile();
                         FileOutputStream fo = new FileOutputStream(f);
                         fo.write(bytes.toByteArray());
                         fo.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                 break;
          } 
       }
    }
4

1 に答える 1

0

これを試してみてください。

カメラから写真をキャプチャするときは、カーソルを使用してロジックを実装し、カーソルを繰り返して、カメラからキャプチャされた最後の写真パスを取得します。

カメラからの最後のキャプチャ写真のパスを提供します。

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(cameraIntent, CAMERA_REQUEST_CODE);

Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{Media.DATA, Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION}, Media.DATE_ADDED, null, "date_added ASC");
if(cursor != null && cursor.moveToFirst())
{
    do {
        uri = Uri.parse(cursor.getString(cursor.getColumnIndex(Media.DATA)));
        photoPath = uri.toString();
    }while(cursor.moveToNext());
    cursor.close();
}
于 2013-02-24T10:46:02.810 に答える