I am trying to take photos from sdcard and it is working in case when user selects from google photos but gives an curserindexoutofbound error when selected from any othe app like gallery or file manager. here is the piece of code.
OnActivity Result ` { if (requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK && data != null && data.getData() != null) { Uri uri = null; String realPath = null;
try
{
uri = data.getData();
Log.e("uri",uri.toString());
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
imageView.setImageBitmap(bitmap);
String imagePath = getRealPathFromURI(uri);
File source = new File(imagePath);
String destinationPath = Environment.getExternalStorageDirectory().toString() + "/IASFolders/"+Configuration.empcode+".jpg";
File destination = new File(destinationPath);
try
{
InputStream in = new FileInputStream(source.getAbsolutePath());
OutputStream out = new FileOutputStream(destination.getAbsolutePath());
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0)
{
out.write(buf, 0, len);
}
in.close();
out.close();
}
catch (IOException e)
{
e.printStackTrace();
Log.d("File Copy Exception", e.toString());
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
`{getRealPathFromURI function
private String getRealPathFromURI(Uri contentURI) {
String result;
Cursor cursor = getActivity().getContentResolver()
.query(contentURI,new String[]{MediaStore.Images.Media.DATA},MediaStore.Images.Media.DISPLAY_NAME+"=?" ,new String[]{Configuration.empcode},null);
/*
* Cursor imageCursor=getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,new String[]{MediaStore.Images.Media.DATA},MediaStore.Images.Media.DISPLAY_NAME+"=?" ,new String[]{imageTitle},null);
imageCursor.moveToFirst();
String imageData=imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
Long imageSize=imageCursor.getLong(imageCursor.getColumnIndex(ImageColumns.SIZE));
Toast.makeText(getApplicationContext(), String.valueOf(imageSize), Toast.LENGTH_LONG).show();*/
if (cursor == null)
{
result = contentURI.getPath();
}
else
{
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
result = cursor.getString(idx);
cursor.close();
}
return result;
}
}`