0

我是 Android 应用程序开发的新手。我正在尝试使用 Intents 拍照。一切都很好,我可以拍照并将其保存到外部存储中,但我无法找到它的保存位置。这是我的 onCreate 方法:

private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
public static final int MEDIA_TYPE_IMAGE = 1;
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        Uri fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
        startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
    }

在这里我创建了保存图像的路径:

private static Uri getOutputMediaFileUri(int type){
          return Uri.fromFile(getOutputMediaFile(type));
    }


private static File getOutputMediaFile(int type){
    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
              Environment.DIRECTORY_PICTURES), "MyCameraApp");

    if (! mediaStorageDir.exists()){
        if (! mediaStorageDir.mkdirs()){
            Log.d("MyCameraApp", "failed to create directory");
            return null;
        }
    }

    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File mediaFile;
    if (type == MEDIA_TYPE_IMAGE){
        mediaFile = new File(mediaStorageDir.getPath() + File.separator +
        "IMG_"+ timeStamp + ".jpg");
    } else {
        return null;
    }

    return mediaFile;
}

图像保存在指定的路径中,但其中的数据onActivityResult为空,我无法获取路径:

protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if( requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE )
        {
            if( resultCode == RESULT_OK ){
                 Toast.makeText(this, "Video saved to:\n" +data.getData(), Toast.LENGTH_LONG).show();

            }

        }
    }
4

1 回答 1

1

使用此功能单击图像

public void takePhoto1() {
        if (!android.os.Environment.getExternalStorageState().equals(
                android.os.Environment.MEDIA_MOUNTED)) {
            Toast.makeText(Add_View_Images_Activity.this,
                    "Please insert SDcard for capturing photo.",
                    Toast.LENGTH_SHORT).show();
        } else {

            try {

                photo1=new File(fWrapper.path+"/"+System.currentTimeMillis()+".jpg");
                Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);              
                cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo1));
                cameraIntent.putExtra("return-data", true);

                startActivityForResult(cameraIntent, 4);
            } catch (Exception e) {
                Toast.makeText(Add_View_Images_Activity.this, ""+e, Toast.LENGTH_LONG).show();
            }
        }

    }

此函数将图像保存在指定位置。现在您可以从onActivityResult中的文件photo1的路径中获取点击图像的路径。

像这样

String path=photo1.getAbsolutePath();

现在只需传递您获得此功能的路径,它始终 100% 工作。

 public Bitmap getImage(String path) throws IOException
        {
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeFile(path, options);        
            int srcWidth = options.outWidth;
            int srcHeight = options.outHeight;
            int[] newWH =  new int[2];
            newWH[0] = srcWidth/2;
            newWH[1] = (newWH[0]*srcHeight)/srcWidth;

            int inSampleSize = 1;
            while(srcWidth / 2 >= newWH[0]){
                srcWidth /= 2;
                srcHeight /= 2;
                inSampleSize *= 2;
            }

            //      float desiredScale = (float) newWH[0] / srcWidth;
            // Decode with inSampleSize
            options.inJustDecodeBounds = false;
            options.inDither = false;
            options.inSampleSize = inSampleSize;
            options.inScaled = false;
            options.inPreferredConfig = Bitmap.Config.ARGB_8888;
            Bitmap sampledSrcBitmap = BitmapFactory.decodeFile(path,options);
            ExifInterface exif = new ExifInterface(path);
            String s=exif.getAttribute(ExifInterface.TAG_ORIENTATION);
            System.out.println("Orientation>>>>>>>>>>>>>>>>>>>>"+s);
            Matrix matrix = new Matrix();
            float rotation = rotationForImage(Add_View_Images_Activity.this, Uri.fromFile(new File(path)));
            if (rotation != 0f) {
                matrix.preRotate(rotation);
            }
            int newh = ( w * sampledSrcBitmap.getHeight() ) /sampledSrcBitmap.getWidth();
            Bitmap r=Bitmap.createScaledBitmap(sampledSrcBitmap, w, newh, true);
            Bitmap resizedBitmap = Bitmap.createBitmap(
                    r, 0, 0, w, newh, matrix, true);

            return resizedBitmap;
        }
于 2013-03-05T11:31:53.533 回答