in my project, i got a problem about insert a picture from android to database.
i have success insert a picture from gallery mobile but not work insert from a camera mobile.
This my source code
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_CAMERA) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaColumns.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
pathToOurFile = filePath;
format = filePath.substring(filePath.lastIndexOf(".") + 1,
filePath.length());
this.imGambar.setImageBitmap((Bitmap) data.getExtras().get(
"data"));
} else if (requestCode == SELECT_FILE) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
pathToOurFile = filePath;
format = filePath.substring(filePath.lastIndexOf(".") + 1,
filePath.length());
this.imGambar
.setImageBitmap(BitmapFactory.decodeFile(filePath));
}
}
}
This method doesn't work fine to get Uri in request camera activity result. You'd better use :
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
mImageCaptureUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
And in the onActivityResult :
String path = mImageCaptureUri.toString();
where
Uri mImageCaptureUri ;
is a global variable.
Hope it helps...
Related
Im trying to get the path file for showing in a recycler view using intent for choosing file and activityresult for response of that action so my code works in android 4> until 7< and it works fine for those versions but in 7>= there is a problem with that code , especially in android 9.
public void openGallery() {
try {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select file to upload "),
SettingsUtil.ACTIVITY_GALLERY);
} catch (Exception e) {
e.printStackTrace();
}
}
#Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SettingsUtil.ACTIVITY_GALLERY && resultCode == RESULT_OK && null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver()
.query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
String code = year + "-" + reservation + "-" + (counter++);
File auxFile = new File(picturePath);
}
}
i expect to String picturePath = cursor.getString(columnIndex); get the path like old android vesions 4+ <7 but in those new versions there is a problem there when working in last versions
My aim is to browse a file and copy it, and paste it in a other folder.
To browse the file I have used Intent as shown below
Intent intent = new Intent();
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "DEMO"), 1001);
public void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1001) {
Uri currFile = data.getData();
}
}
Now I want to copy the file for that I have to get file real path from URI.
(I am passing file real path to java FileInputStream )
To convert Uri to real path I did as shown below
public static String getPath(Context cx,Uri uri) {
String filePath = "";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ){
String wholeid = DocumentsContract.getDocumentId(uri);
String id = wholeid.split(":")[1];
String[] column = {MediaStore.Images.Media.DATA};
String sel = MediaStore.Images.Media._ID + "=?";
Cursor cursor = cx.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column, sel, new String[]{id}, null);
int columnIndex = cursor.getColumnIndex(column[0]);
if (cursor.moveToFirst()) {
filePath = cursor.getString(columnIndex);
}
cursor.close();
}else{
String[] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = cx.getContentResolver().query(uri, null, null, null, null);
if (cursor == null) {
return uri.getPath();
} else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
filePath = cursor.getString(idx);
}
}
return filePath;
}
If the file is more than 10kb it is giving TransactionTooLargeException.
My question is how can I browse and copy a file and paste in a folder without getting TransactionTooLargeException.
Is there any good method to do that.
Image is not importing, every time when I pic image from gallery in Android.
Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, LOAD_IMAGE_RESULTS);
super.onActivityResult(requestCode, resultCode, data);
BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options();
BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565;
if (requestCode == LOAD_IMAGE_RESULTS && resultCode == RESULT_OK
&& data != null) {
imgUri = data.getData();
// Let's read picked image path using content resolver
String[] filePath = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(imgUri, filePath, null,
null, null);
cursor.moveToFirst();
String imagePath = cursor.getString(cursor
.getColumnIndex(filePath[0]));
bmp = BitmapFactory.decodeFile(imagePath);
cursor.close();
}
image is not importing every time ,some bmp sets nothing on imageview.
how to get image from gallery which supports for API>=19 & API<19 both...
This code'll solve the problem for SDK < API11, SDK >= 11 && SDK < 19 and SDK > 19
Declare it Globally
public final int GALLERY_PHOTO = 2;
Bitmap newbitmap;
private Uri fileUri;
Use this Method to Start Image chooser
public void callGallery() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),
GALLERY_PHOTO);
}
Use this condition in Default #Overide onActivityResult(int requestCode, int resultCode, Intent data)
if (requestCode == GALLERY_PHOTO) {
if (resultCode == RESULT_OK) {
// SDK < API11
if (Build.VERSION.SDK_INT < 11) {
try {
realPath = RealPathUtil.getRealPathFromURI_BelowAPI11(
Yourclassname.this,
data.getData());
setTextViews(Build.VERSION.SDK_INT, data.getData()
.getPath(), realPath);
} catch (Exception e) {
e.printStackTrace();
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver()
.query(selectedImage, filePathColumn, null,
null, null);
cursor.moveToFirst();
int columnIndex = cursor
.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
newbitmap = BitmapFactory.decodeFile(filePath);
imageview.setImageBitmap(newbitmap);
}
}
// SDK >= 11 && SDK < 19
else if (Build.VERSION.SDK_INT < 19) {
try {
realPath = RealPathUtil.getRealPathFromURI_API11to18(
yourclassname.this,
data.getData());
setTextViews(Build.VERSION.SDK_INT, data.getData()
.getPath(), realPath);
} catch (Exception e1) {
e1.printStackTrace();
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver()
.query(selectedImage, filePathColumn, null,
null, null);
cursor.moveToFirst();
int columnIndex = cursor
.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
newbitmap = BitmapFactory.decodeFile(filePath);
imageview.setImageBitmap(newbitmap);
}
}
else {
try {
realPath = RealPathUtil.getRealPathFromURI_API19(
yourclassname.this,
data.getData());
setTextViews(Build.VERSION.SDK_INT, data.getData()
.getPath(), realPath);
} catch (Exception e) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver()
.query(selectedImage, filePathColumn, null,
null, null);
cursor.moveToFirst();
int columnIndex = cursor
.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
newbitmap = BitmapFactory.decodeFile(filePath);
imageview.setImageBitmap(newbitmap);
}
}
// end
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(getApplicationContext(), "Canceled",
Toast.LENGTH_SHORT).show();
} else {
// failed to capture image
Toast.makeText(getApplicationContext(),
"Oops!! Failed to pick Image", Toast.LENGTH_SHORT).show();
}
}
Include this method in your class
private void setTextViews(int sdk, String uriPath, String realPath) {
Uri uriFromPath = Uri.fromFile(new File(realPath));
fileUri = uriFromPath;
try {
newbitmap = BitmapFactory.decodeStream(getContentResolver()
.openInputStream(fileUri));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
imageview.setImageBitmap(newbitmap);
Log.d("Status", "Build.VERSION.SDK_INT:" + sdk);
Log.d("Status", "URI Path:" + fileUri);
Log.d("Status", "Real Path: " + realPath);
}
Create this Helper Methods in RealPathUtil.class
public class RealPathUtil {
#SuppressLint("NewApi")
public static String getRealPathFromURI_API19(Context context, Uri uri){
String filePath = "";
String wholeID = DocumentsContract.getDocumentId(uri);
// Split at colon, use second item in the array
String id = wholeID.split(":")[1];
String[] column = { MediaStore.Images.Media.DATA };
// where id is equal to
String sel = MediaStore.Images.Media._ID + "=?";
Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
column, sel, new String[]{ id }, null);
int columnIndex = cursor.getColumnIndex(column[0]);
if (cursor.moveToFirst()) {
filePath = cursor.getString(columnIndex);
}
cursor.close();
return filePath;
}
#SuppressLint("NewApi")
public static String getRealPathFromURI_API11to18(Context context, Uri contentUri) {
String[] proj = { MediaStore.Images.Media.DATA };
String result = null;
CursorLoader cursorLoader = new CursorLoader(
context,
contentUri, proj, null, null, null);
Cursor cursor = cursorLoader.loadInBackground();
if(cursor != null){
int column_index =
cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
result = cursor.getString(column_index);
}
return result;
}
public static String getRealPathFromURI_BelowAPI11(Context context, Uri contentUri){
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index
= cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
}
Hope this will solve your Problem.
I have a class for uploading image to server but i can't choose image from gallery.It's properly working on API Level +17 but not working on API Level -17
thoose are my codes
CustomJavascriptClass
public String uploadImage(){
Activity activity = (Activity)context;
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
activity.startActivityForResult(photoPickerIntent, 100);
...
MainActivity
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
if(requestCode == 100){
try{
Uri selectedImage = imageReturnedIntent.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
Log.i("File", filePath);
if (Build.VERSION.SDK_INT >= 17){
HappyJavaScriptInterface.attachment = new File(filePath);
HappyJavaScriptInterface.uploadProcess = 1;
}
else
{
HappyJavaScriptInterfaceUnder17.attachment = new File(filePath);
HappyJavaScriptInterfaceUnder17.uploadProcess = 1;
}
}
catch(Exception ex){
if (Build.VERSION.SDK_INT >= 17){
HappyJavaScriptInterface.uploadProcess = 1;
}
else
{
HappyJavaScriptInterfaceUnder17.uploadProcess = 1;
}
}
}
It's working properly on android 4.2.2 emulator but not working on 2.3.3
Thanks
Try to set android:noHistory="false" in your manifest for MainActivity
I have an android app that start the smartphone camera
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST );
To display the taken picture I use this piece of code,
#Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
setImage=true;
if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK) {
if(data!=null)
{
ImageView image = (ImageView) findViewById(R.id.imagePreview);
Bundle extras = data.getExtras();
Bitmap mImageBitmap = (Bitmap) extras.get("data");
image.setImageBitmap(mImageBitmap);
}
}
}
This works pretty fine but if i want to get the path of the taken picture, i have to use (intent)data.getData() but this returns a null value. what should i do to solve this problem?
Try this hope it helps you.
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
String imageName = picturePath.substring(picturePath.lastIndexOf(
"/", picturePath.length()));
Try out as below:
Bitmap m_photo = (Bitmap) p_data.getExtras().get("data");
if (m_photo != null)
{
ByteArrayOutputStream m_upByteArrayOutputStream = new ByteArrayOutputStream();
m_photo.compress(Bitmap.CompressFormat.PNG, 40, m_upByteArrayOutputStream);
Drawable m_imageFromCamera = new BitmapDrawable(m_photo);
image.setBackgroundDrawable(m_photo);
}
EDITED:
To get the Path of the image try out below code:
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String imagePath = cursor.getString(columnIndex); <---- Here is your image path.
cursor.close();