来自Gallery和Camera-taken-photo的URI/URL路径不同



我试图让用户选择使用设备默认相机拍照和从图像库中选择也默认到设备。

我可以让相机拍照,并有它显示在应用程序内只是很好,因为它似乎喜欢URI路径直接到JPG文件。然而,提供给图库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);

在Gallery中,它打开了,我可以很好地浏览,它只是不像拍照那样显示图像。

一旦选中/拍摄,用于将图像拉入应用程序的代码是:

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

检查uri字符串中的"/external",然后使用get the 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);               
    }

最新更新