2011-11-03 102 views
7

好吧我正在制作一个Android应用程序,并使用CAPTURE_PIC_REQUEST拍摄照片并将其作为预览存储在图像查看器中的屏幕上。我想知道如何获得Uri,并且实际上是因为我计划采取这些信息,保存并稍后访问。所以我无法想象如何从我刚刚拍摄的照片中获得Uri或路径名称。下面是从我的活动正在处理从ImageView中获取图片的文件路径

package com.CS480; 

import java.io.File; 

import android.app.Activity; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 

public class AddEx extends Activity { 
    static final int CAMERA_PIC_REQUEST = 1337; 
    public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.add); 

    Button camera = (Button) findViewById(R.id.picButton); 
    camera.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);    
     }    
    }); 

} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == CAMERA_PIC_REQUEST) { 
     Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
     ImageView image = (ImageView) findViewById(R.id.returnedPic); 
     image.setImageBitmap(thumbnail); 
    } 
} 

} 

代码那么,如何从形象,我找回上的应用程序才能获得该文件的位置

回答

8

据我所知,你可以做这样的事情:

private Uri mImageCaptureUri; 

public class AddEx extends Activity { 
    static final int CAMERA_PIC_REQUEST = 1337; 
    public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.add); 

    Button camera = (Button) findViewById(R.id.picButton); 
    camera.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      Intent cameraIntent = 
        new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, 
        mImageCaptureUri); 
      startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);    
     }    
    }); 

} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == CAMERA_PIC_REQUEST) { 
     Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
     ImageView image = (ImageView) findViewById(R.id.returnedPic); 
     image.setImageBitmap(thumbnail); 

     String pathToImage = mImageCaptureUri.getPath(); 

     // pathToImage is a path you need. 

     // If image file is not in there, 
     // you can save it yourself manually with this code: 
     File file = new File(mImageCaptureUri.getPath()); 
     FileOutputStream fOut = new FileOutputStream(file); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut); // You can choose any format you want 
    } 
}  

从约android.provider Android文档。 MediaStore.EXTRA_OUTPUT:

用于指示内容解析器的Intent-extra的名称Uri 用于存储请求的图像或视频。

1

你可以尝试与得到的图像的URI

data.getExtras.get("URI"); 

但这可能无法正常工作。你可以做的只是自己保存位图。看到这个问题的指导如何做到这一点:Save bitmap to location

1

当你把你的形象,你必须存储它的地方获得图像的位置。

要做到这一点,你可以存储到MediaStore:

String result = MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "", ""); 

imageFileUri = Uri.parse(result); 
0

试试这个GET映像文件的路径形式的位图

public void uploadBitmap(Context mContext, Bitmap bitmap) { 

    String imagePath = null; 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
    Uri uri; 
    Cursor cursor = mContext.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Images.Media.DATA, MediaStore.Images.Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION}, MediaStore.Images.Media.DATE_ADDED, null, "date_added DESC"); 
    if (cursor != null && cursor.moveToFirst()) { 
     do { 
      uri = Uri.parse(cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA))); 
      imagePath = uri.toString(); 
      Log.d("pathatka", uri.toString()); 
      break; 
     } while (cursor.moveToNext()); 
     cursor.close(); 
    } 

}