1

デバイスのデフォルトのカメラで写真を撮るか、デバイスのデフォルトの画像ギャラリーから選択するかをユーザーに選択させようとしています。

カメラに写真を撮らせて、アプリ内に問題なく表示させることができます.JPGファイルへの直接のURIパスが好きなようです. ただし、ギャラリー URI に指定されたパスは大きく異なり、画像はまったく表示されません。

ここに私が得るパスがあります:

カメラから撮影した場合: /mnt/sdcard/filename.jpg

ギャラリーから選択した場合 : /external/images/media/# (# は ID 番号/サムネイルだと思います)

両方のパスを取得するために使用されるコードは次のとおりです。

カメラ:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            mImageCaptureUri = 
            Uri.fromFile(new file(Environment.getExternalStorageDirectory(),
            "fname_" + String.valueOf(System.currentTimeMillis()) + ".jpg"));
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);

ギャラリー

   Intent intent = new Intent();
   intent.setType("image/*");
   intent.setAction(Intent.ACTION_GET_CONTENT);
   startActivityForResult(Intent.createChooser(intent, 
           "Complete action using"), PICK_FROM_FILE);
   intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);

ギャラリーを使用すると、開いてブラウジングできますが、写真を撮るときのように画像が表示されません。

選択/撮影された画像をアプリに取り込むために使用されるコードは次のとおりです。

   ImageView getMyphoto = (ImageView) findViewById(R.id.usePhoto);
   String stringUrl = prefSettings.getString("myPic", "");
   Uri getIMG = Uri.parse(stringUrl);
   getMyphoto.setImageURI(null);
   getMyphoto.setImageURI(getIMG);
4

1 に答える 1

2

URI 文字列の「/external」を確認し、get right path メソッドを使用して絶対パスを取得します。

 private String getRealPathFromURI(Uri contentUri) {
        int columnIndex = 0;

        String[] proj = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(contentUri, proj, null, null, null);

        try {
            columnIndex = cursor.getColumnIndexOrThrow
                           (MediaStore.Images.Media.DATA);
        } catch (Exception e) {
            Toast.makeText(ImageEditor.this, "Exception in getRealPathFromURI",
                           Toast.LENGTH_SHORT).show();
            finish();  
            return null;
        }       
        cursor.moveToFirst();
        return cursor.getString(columnIndex);               
    }
于 2011-09-07T05:34:35.830 に答える