来自Camera Intent的文件路径

时间:2013-02-22 14:21:03

标签: android file path

我正在尝试使用Camera Intent作为String获取图片的文件路径,但String filePath始终为null。我做错了什么?

       public void onClick(View arg0) {
        switch (arg0.getId()) {     
         case R.id.btnImageCapture:
            Intent openCamera = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
               startActivityForResult(openCamera, OPEN_CAMERA); 
                 break;
           }
        }



        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         switch(requestCode){
         case OPEN_CAMERA:
             if (resultCode == RESULT_OK && data != null) {
                 Uri captureImage = data.getData();
                 String filePath = captureImage.getPath();
                 break;
              } 
           }
        }

2 个答案:

答案 0 :(得分:1)

这是我获取相机拍摄的图像的方式。

我在保存图像之前和之后创建文件然后将其保存到我的文件中。

File externalFile = new File("Whatever you want the path to be...");
Uri uriSavedImage=Uri.fromFile(externalFile);
Intent launchcameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
launchcameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
startActivityForResult(launchcameraIntent,CAMERA_PIC_REQUEST);

然后收到结果。

protected void onActivityResult(int requestCode,int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == CAMERA_PIC_REQUEST) {
                  Bitmap photo = BitmapUtils.decodeFileForDisplay(new File("Whatever your file's path is");
            }
        }
}

答案 1 :(得分:1)

尝试以下方法将 captureImage Uri作为参数传递:

    public String getRealPathFromURI(Uri contentUri) {
        String[] projx = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(contentUri, projx, null, null, null);
         int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

修改

这是getData()在某些设备上返回null的常见错误。您需要使用预先插入的Uri来防止这种情况发生。例如:

  Intent cameraIntent = new Intent(
                android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
 preinsertedUri = getContentResolver().insert(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                new ContentValues());

        startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);

获得结果:

         @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {

    case CAMERA_PIC_REQUEST:

        if (resultCode != 0 && data != null) {

            Uri imageUri = preinsertedUri;
            }
              break; 
                 }