views:

552

answers:

1

I'm trying to get a byte array of an image saved locally on the phone. I'm using the code:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.upload);

    // Look in the Device
    startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), 1);
    // Look in the SD Card
    // startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI), 1);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == 1)
    if (resultCode == Activity.RESULT_OK) {
      Uri selectedImage = data.getData();
      Cursor Cur = Upload.this.managedQuery(selectedImage, null, null, null,null);
      if (Cur.moveToFirst()) {
       File Img = new File(selectedImage.getPath());
       long Length = Cur.getLong(Cur.getColumnIndex(ImageColumns.SIZE));
       byte[] B = new byte[(int)Length-1];
       FileInputStream ImgIs;
    try {
   ImgIs = new FileInputStream(Img);
   ImgIs.read(B);
    } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
    } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  int i = B.length;
      }
    } 
}

But it throws a FileNotFound exception on

ImgIs = new FileInputStream(Img)

How can I get the Bytes?

A: 

Nevermind, I found the answer, see http://www.mail-archive.com/[email protected]/msg66448.html

Cursor cursor = getContentResolver().query(uri, null, null, null, null);
cursor.moveToFirst();

int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
String absoluteFilePath = cursor.getString(idx);
FileInputStream fis = new FileInputStream(absoluteFilePath);
JoshKraker