Android Video Camera : still picture - android

I use the camera intent to capture video. Here is the problem:
If I use this line of code, I can record video. But onActivityResult doesn't work.
Intent intent = new Intent("android.media.action.VIDEO_CAMERA");
If I use this line of code, after press the recording button, the camera is freezed, I mean,
the picture is still.
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
BTW, when I use Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); to capture a picture, it works fine.
The java file is as follows:
package com.camera.picture;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.VideoView;
public class PictureCameraActivity extends Activity {
private static final int IMAGE_CAPTURE = 0;
private static final int VIDEO_CAPTURE = 1;
private Button startBtn;
private Button videoBtn;
private Uri imageUri;
private Uri videoUri;
private ImageView imageView;
private VideoView videoView;
/** Called when the activity is first created.
* sets the content and gets the references to
* the basic widgets on the screen like
* {#code Button} or {#link ImageView}
*/
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imageView = (ImageView)findViewById(R.id.img);
videoView = (VideoView)findViewById(R.id.videoView);
startBtn = (Button) findViewById(R.id.startBtn);
startBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
startCamera();
}
});
videoBtn = (Button) findViewById(R.id.videoBtn);
videoBtn.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
startVideoCamera();
}
});
}
public void startCamera() {
Log.d("ANDRO_CAMERA", "Starting camera on the phone...");
String fileName = "testphoto.jpg";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
values.put(MediaStore.Images.Media.DESCRIPTION,
"Image capture by camera");
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
imageUri = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
startActivityForResult(intent, IMAGE_CAPTURE);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == IMAGE_CAPTURE) {
if (resultCode == RESULT_OK){
Log.d("ANDROID_CAMERA","Picture taken!!!");
imageView.setImageURI(imageUri);
}
}
if (requestCode == VIDEO_CAPTURE) {
if (resultCode == RESULT_OK) {
Log.d("ANDROID_CAMERA","Video taken!!!");
Toast.makeText(this, "Video saved to:\n" +
data.getData(), Toast.LENGTH_LONG).show();
videoView.setVideoURI(videoUri);
}
}
}
private void startVideoCamera() {
// TODO Auto-generated method stub
//create new Intent
Log.d("ANDRO_CAMERA", "Starting camera on the phone...");
String fileName = "testvideo.mp4";
ContentValues values = new ContentValues();
values.put(MediaStore.Video.Media.TITLE, fileName);
values.put(MediaStore.Video.Media.DESCRIPTION,
"Video captured by camera");
values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
videoUri = getContentResolver().insert(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
Intent intent = new Intent("android.media.action.VIDEO_CAMERA");
//Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, videoUri);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
// start the Video Capture Intent
startActivityForResult(intent, VIDEO_CAPTURE);
}
private static File getOutputMediaFile() {
// TODO Auto-generated method stub
// To be safe, you should check that the SDCard is mounted
// using Environment.getExternalStorageState() before doing this.
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "MyCameraApp");
// This location works best if you want the created images to be shared
// between applications and persist after your app has been uninstalled.
// Create the storage directory if it does not exist
if (! mediaStorageDir.exists()){
if (! mediaStorageDir.mkdirs()){
Log.d("MyCameraApp", "failed to create directory");
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile;
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"VID_"+ timeStamp + ".mp4");
return mediaFile;
}
/** Create a file Uri for saving an image or video */
private static Uri getOutputMediaFileUri(){
return Uri.fromFile(getOutputMediaFile());
}
}

Use MediaStore.ACTION_VIDEO_CAPTURE to record Video .
Intent photoPickerIntent= new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
startActivityForResult(Intent.createChooser(photoPickerIntent,"Take Video"),TAKE_VIDEO);
And your OnActivityResult must be like this to Save Video in particular location :
if(requestCode==TAKE_VIDEO)
{
try
{
Log.e("videopath","videopath");
AssetFileDescriptor videoAsset = getContentResolver().openAssetFileDescriptor(data.getData(), "r");
FileInputStream fis = videoAsset.createInputStream();
File root=new File(Environment.getExternalStorageDirectory(),"Directory");
if (!root.exists()) {
root.mkdirs();
}
File file;
file = new File(root,filename+".mp4" );
Uri uri=Uri.fromFile(file);
Item1.videopath=uri.getPath();
FileOutputStream fos = new FileOutputStream(file);
byte[] buf = new byte[1024];
int len;
while ((len = fis.read(buf)) > 0) {
fos.write(buf, 0, len);
}
fis.close();
fos.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}

Related

A chunk of code not being executed

I am trying to embed a cropper through a library in the Main activity of ABBYY Cloud OCR sample code. But no matter how hard I try, instead of executing the crop-code, it always jumps on to the next activity. Why is this happening?
package bahadur.translateit;
import abbyy.ocrsdk.android.R;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.net.*;
import java.io.*;
import eu.janmuller.android.simplecropimage.CropImage;
import android.os.Environment;
import android.provider.MediaStore;
import android.content.Intent;
import android.database.Cursor;
import android.view.View;
public class MainActivity extends Activity {
private final int TAKE_PICTURE = 0;
private final int SELECT_FILE = 1;
private String resultUrl = "result.txt";
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void captureImageFromSdCard( View view ) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, SELECT_FILE);
}
public static final int MEDIA_TYPE_IMAGE = 1;
private static Uri getOutputMediaFileUri(){
return Uri.fromFile(getOutputMediaFile());
}
/** Create a File for saving an image or video */
private static File getOutputMediaFile(){
// To be safe, you should check that the SDCard is mounted
// using Environment.getExternalStorageState() before doing this.
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "TranlateIt!");
// This location works best if you want the created images to be shared
// between applications and persist after your app has been uninstalled.
// Create the storage directory if it does not exist
if (! mediaStorageDir.exists()){
if (! mediaStorageDir.mkdirs()){
return null;
}
}
// Create a media file name
File mediaFile = new File(mediaStorageDir.getPath() + File.separator + "image.jpg" );
return mediaFile;
}
public void captureImageFromCamera( View view) {
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
Uri fileUri = getOutputMediaFileUri(); // create a file to save the image
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
startActivityForResult(intent, TAKE_PICTURE);
}
#Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != Activity.RESULT_OK)
return;
String imageFilePath = null;
switch (requestCode) {
case TAKE_PICTURE:
imageFilePath = getOutputMediaFileUri().getPath();
// the following code for crop does not execute
Intent intent = new Intent(this, CropImage.class);
intent.putExtra(CropImage.IMAGE_PATH, imageFilePath);
intent.putExtra(CropImage.SCALE, true);
intent.putExtra("outputX", 200); //Set this to define the max size of the output bitmap
intent.putExtra("outputY", 150); //Set this to define the max size of the output bitmap
intent.putExtra(CropImage.ASPECT_X, 0);
intent.putExtra(CropImage.ASPECT_Y, 0);
break;
case SELECT_FILE:
Uri imageUri = data.getData();
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cur = managedQuery(imageUri, projection, null, null, null);
cur.moveToFirst();
imageFilePath = cur.getString(cur.getColumnIndex(MediaStore.Images.Media.DATA));
// same goes for the following chunk of code
Intent intet = new Intent(this, CropImage.class);
intet.putExtra(CropImage.IMAGE_PATH, imageFilePath);
intet.putExtra(CropImage.SCALE, true);
intet.putExtra("outputX", 200); //Set this to define the max size of the output bitmap
intet.putExtra("outputY", 150); //Set this to define the max size of the output bitmap
intet.putExtra(CropImage.ASPECT_X, 0);
intet.putExtra(CropImage.ASPECT_Y, 0);
break;
}
this runs instead
String lastfilepath = imageFilePath;
//Remove output file
deleteFile(resultUrl);
Intent results = new Intent( this, ResultsActivity.class);
results.putExtra("IMAGE_PATH", lastfilepath);
results.putExtra("RESULT_PATH", resultUrl);
startActivity(results);
}
}
from my comments, i mean somethign like this:
case TAKE_PICTURE:
imageFilePath = getOutputMediaFileUri().getPath();
Intent intent = new Intent(this, CropImage.class);
intent.putExtra(CropImage.IMAGE_PATH, imageFilePath);
intent.putExtra(CropImage.SCALE, true);
intent.putExtra("outputX", 200); //Set this to define the max size of the output bitmap
intent.putExtra("outputY", 150); //Set this to define the max size of the output bitmap
intent.putExtra(CropImage.ASPECT_X, 0);
intent.putExtra(CropImage.ASPECT_Y, 0);
startActivity(intent);// THIS is the line you are missing!

Capturing a picture and than displaying within an ImageView - Android

Hey guys I am using my webcam to simulate a camera in the emulator and when I go to take the picture and select the check mark button to use the picture I run across an error while trying to display the image back into my ImageView on the app.
Here is my code:
Initiator:
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePictureIntent, CAMERA_PIC_REQUEST);
function....
#Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_PIC_REQUEST) {
if (resultCode == RESULT_OK) {
Uri selectedImageUri = data.getData();
//OI FILE Manager
filemanagerstring = selectedImageUri.getPath();
//MEDIA GALLERY
selectedImagePath = getPath(selectedImageUri);
img.setImageURI(selectedImageUri);
imagePath.getBytes();
Bitmap bm = BitmapFactory.decodeFile(imagePath);
Log.w("Here","error");
Bitmap bm = BitmapFactory.decodeFile(imagePath);
ImageView image = (ImageView) findViewById(R.id.gimg1);
image.setImageBitmap(bm);
} else if (resultCode == RESULT_CANCELED){
}
}
}
I run across a runtime error
Suggestions and thoughts are needed!
You can use the following codes. It's fully functional and allows you set image from both your camera and gallery as well. I am almost sure that your runtime error is "OutOfMemoryError: bitmap size exceeds VM budget" as I am seeing that you have loaded the captured image directly to your imageView. You should scale it , please take a look at the method called GetScaledBitmap in my following code. Hope your codes will work ok if you use that method only when you load the image to your imageview. Full example is done for you , Hope it helps.
package com.tseg.android.mctemplate;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.provider.MediaStore.Images;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import com.tseg.android.mctemplate.R;
public class PhotoTake extends Activity {
Button add1 ;
ImageView img1 ;
private static final int ACTIVITY_PHOTOS = 0;
private static final String PACKAGE = "spine";
Uri mCapturedImageURI;
private int photo_count = 0;
boolean hasPhotos = false;
Bitmap bitmap;
String[] paths;
#Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.photo);
add1 = (Button) findViewById(R.id.add1);
img1 = (ImageView) findViewById(R.id.img1);
add1.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View arg0) {
ShowDialog(100, 1000);
}
});
}
void ShowDialog(final int req, final int choose) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("");
builder.setTitle("Select Photo")
.setCancelable(false)
.setNegativeButton("Take Photo",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
File pictureFileDir = getDir();
if (!pictureFileDir.exists() && !pictureFileDir.mkdirs()) {
Log.d("Photo Take", "Can't create directory to save image.");
Toast.makeText(PhotoTake.this , "Can't create directory to save image.",
Toast.LENGTH_LONG).show();
return;
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmddhhmmss");
String date = dateFormat.format(new Date());
String photoFile = "Picture_" + date + ".jpg";
String filepath = pictureFileDir.getPath() + File.separator;
File imageFile = new File(filepath , photoFile);
ContentValues image = new ContentValues();
image.put(Images.Media.TITLE, photoFile);
image.put(Images.Media.DISPLAY_NAME, photoFile);
image.put(Images.Media.DESCRIPTION, "Accident data Accachment " + date);
image.put(Images.Media.DATE_ADDED, date);
image.put(Images.Media.DATE_TAKEN, date);
image.put(Images.Media.DATE_MODIFIED, date);
image.put(Images.Media.MIME_TYPE, "image/jpeg");
image.put(Images.Media.ORIENTATION, 0);
File parent = imageFile.getParentFile();
String path = parent.toString().toLowerCase();
String name = parent.getName().toLowerCase();
image.put(Images.ImageColumns.BUCKET_ID, path.hashCode());
image.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, name);
image.put(Images.Media.SIZE, imageFile.length());
image.put(Images.Media.DATA, imageFile.getAbsolutePath());
mCapturedImageURI = PhotoTake.this.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, image);
Intent intent = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT,
mCapturedImageURI);
startActivityForResult(intent, req);
}
})
.setPositiveButton("Choose Existing",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(
intent, "Complete action using"),
choose);
}
});
AlertDialog alert = builder.create();
alert.show();
}
#Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// From camera
if (requestCode == 100 && resultCode == Activity.RESULT_OK) {
if (mCapturedImageURI != null) {
img1.setImageBitmap(getScaledBitmap(mCapturedImageURI));;
System.out.println("Onactivity Result uri = " + mCapturedImageURI.toString());
} else {
Toast.makeText(PhotoTake.this, "Error getting Image",
Toast.LENGTH_SHORT).show();
}
}
//From gallery
if (requestCode == 1000) {
if (resultCode == Activity.RESULT_OK) {
Uri selectedImage = data.getData();
System.out.println("Content Path : " + selectedImage.toString());
if (selectedImage != null) {
img1.setImageBitmap(getScaledBitmap(selectedImage));
} else {
Toast.makeText(PhotoTake.this, "Error getting Image",
Toast.LENGTH_SHORT).show();
}
} else if (resultCode == Activity.RESULT_CANCELED) {
Toast.makeText(PhotoTake.this, "No Photo Selected",
Toast.LENGTH_SHORT).show();
}
}
}
public Bitmap getBitmap(String path) {
Bitmap myBitmap = null;
File imgFile = new File(path);
if (imgFile.exists()) {
myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
}
return myBitmap;
}
public String getPath(Uri photoUri) {
String filePath = "";
if (photoUri != null) {
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(photoUri,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
filePath = cursor.getString(columnIndex);
cursor.close();
}
return filePath;
}
private File getDir() {
File sdDir = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
return new File(sdDir, "SpineAttachments");
}
private Bitmap getScaledBitmap(Uri uri){
Bitmap thumb = null ;
try {
ContentResolver cr = getContentResolver();
InputStream in = cr.openInputStream(uri);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize=8;
thumb = BitmapFactory.decodeStream(in,null,options);
} catch (FileNotFoundException e) {
Toast.makeText(PhotoTake.this , "File not found" , Toast.LENGTH_SHORT).show();
}
return thumb ;
}
}
if(requestCode==CAMERA_PIC_REQUEST && resultCode==RESULT_OK){
Bitmap image = (Bitmap) data.getExtras().get("data");
ImageView image = (ImageView) findViewById(R.id.gimg1);
image.setImageBitmap(image);
}
if(requestCode==CAMERA_PIC_REQUEST && resultCode==RESULT_OK){
Bitmap image = (Bitmap) data.getExtra("data");
image_taken.setImageBitmap(image);
}
You were calling data.getData() whereas it should have been data.getExtra("data") as data is an intent which you will have put the bitmap
Very Simple way to Click button and set store image in imageview.
`public class MainActivity extends Activity {
private static final int CAMERA_PIC_REQUEST = 22;
Uri cameraUri;
Button BtnSelectImage;
private ImageView ImgPhoto;
private String Camerapath ;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImgPhoto = (ImageView) findViewById(R.id.imageView1);
BtnSelectImage = (Button) findViewById(R.id.button1);
BtnSelectImage.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View view) {
// TODO Auto-generated method stub
try {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "Couldn't load photo", Toast.LENGTH_LONG).show();
}
}
});
}
#Override
public void onActivityResult(final int requestCode, int resultCode, Intent data) {
try {
switch (requestCode) {
case CAMERA_PIC_REQUEST:
if (resultCode == RESULT_OK) {
try {
Bitmap photo = (Bitmap) data.getExtras().get("data");
ImgPhoto.setImageBitmap(photo);
} catch (Exception e) {
Toast.makeText(this, "Couldn't load photo", Toast.LENGTH_LONG).show();
}
}
break;
default:
break;
}
} catch (Exception e) {
}
}
}`
Set this Manifest.
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false"></uses-feature>

getting java.lang.classCastException:android.os.Bundle

i am trying to show a pic clicked from camera on another activity image view,but getting image out of the bundle into bitmaps.. i get this error.
my code is
package com.example.iwm;
import java.io.File;
import java.text.SimpleDateFormat;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
//private static final int RESULT_OK = -1;
private static final int MEDIA_TYPE_IMAGE = 1;
public static Bundle s = null;
//public static String y ;
private Uri fileUri;
private static Intent intent;
private static Intent intent2;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// create Intent to take a picture and return control to the calling application
intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
intent.putExtra(android.provider.MediaStore.ACTION_IMAGE_CAPTURE, fileUri); // set the image file name
// start the image capture Intent
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
//onActivityResult(CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE, int resultCode, intent)
}
private Uri getOutputMediaFileUri(int type) {
// TODO Auto-generated method stub
return Uri.fromFile(getOutputMediaFile(type));
}
/** Create a File for saving an image or video */
#SuppressLint("SimpleDateFormat")
private static File getOutputMediaFile(int type){
// To be safe, you should check that the SDCard is mounted
// using Environment.getExternalStorageState() before doing this.
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "IWMP-Images");
// This location works best if you want the created images to be shared
// between applications and persist after your app has been uninstalled.
// Create the storage directory if it does not exist
if (! mediaStorageDir.exists()){
if (! mediaStorageDir.mkdirs()){
Log.d("IWMP-Images", "failed to create directory");
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new java.util.Date());
File mediaFile;
if (type == MEDIA_TYPE_IMAGE){
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"IMG_"+ timeStamp + ".jpg");
} else {
return null;
}
return mediaFile;
}
#TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
#Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
// Image captured and saved to fileUri specified in the Intent
Toast.makeText(this, "Image saved to:\n" + fileUri, Toast.LENGTH_LONG).show();
s =data.getExtras();
intent2 = new Intent(MainActivity.this,MainActivity2.class);
intent2.putExtra("Image", s);
intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent2);
} else if (resultCode == RESULT_CANCELED) {
// User cancelled the image capture
} else {
// Image capture failed, advise user
Toast.makeText(this, "Image NOT saved ", Toast.LENGTH_LONG).show();
}
}
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
`
from this i an saving the data(Intent) in a bundle S and sending it to activty2
my activity2 code is
package com.example.iwm;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity2 extends Activity {
TextView tx;
Bitmap bmp;
ImageView ivUserImage;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_activity2);
ivUserImage = (ImageView)findViewById(R.id.image);
tx = (TextView)findViewById(R.id.text1);
//tx.setText(MainActivity.y);
Bundle bundle = getIntent().getExtras();
try
{
bmp =(Bitmap)bundle.get("Image");
}
catch(Exception e)
{
tx.setText(e.toString());
}
ivUserImage.setImageBitmap(bmp);
//int i=10;
}
public void upload(View view)
{
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main_activity2, menu);
return true;
}
}
can u try like this
get the image path after u taken from camera like this
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
final String[] imageColumns = { MediaStore.Images.Media._ID,
MediaStore.Images.Media.DATA };
final String imageOrderBy = MediaStore.Images.Media._ID + " DESC";
Cursor imageCursor = managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns,
null, null, imageOrderBy);
if (imageCursor.moveToFirst()) {
String pathoflasttakenimage = imageCursor.getString(imageCursor
.getColumnIndex(MediaStore.Images.Media.DATA));
}
}
pass this imagepath in bundle like this
Intent intent = new Intent(MainActivity.this, MainActivity2.class);
Bundle bundle = new Bundle();
bundle.putString("path", pathoflasttakenimage);
intent.putExtras(bundle);
startActivity(intent);
in another activity use this imagepath to show image in imageview like this
Bundle b = getIntent().getExtras();
String path = b.getString("path");
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 2; // for 1/2 the image to be loaded
Bitmap thumb = Bitmap.createScaledBitmap(
BitmapFactory.decodeFile(path, opts), 96, 96, false);
ivUserImage.setImageBitmap(thumb);
let tell me what's problem in this way u face.
use bundle.get("data") instead bundle.get("Image") for getting Bitmap from Bundle in Second Activity. try it as:
Bundle bundle = getIntent().getExtras();
try
{
// getting error here.
bmp = (Bitmap)bundle.get("data"); //<< use data instead of Image
ivUserImage.setImageBitmap(bmp);
}
catch(Exception e)
{
tx.setText(e.toString());}
}

Image sd card path from intent gallery

I am starting gallery through intent otherwise its giving problem to display gallery in grid view.
But i want the actual sd card path of the image i am selection from the gallery, opened by intent.
here is the code..
Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT);
photoPickerIntent.setType("image/jpg");
photoPickerIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/Pictures/image.jpg"));
startActivityForResult(photoPickerIntent, 1);
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (resultCode == RESULT_CANCELED) {
showToast(this,"Activity cancelled");
return;
}
else if(resultCode == RESULT_OK) {
System.out.println("requestCode--"+requestCode);
System.out.println("resultCode--"+resultCode);
System.out.println("data--"+intent.getData());
Uri uri = intent.getData();
String data = uri.getPath();
System.out.println("uri.getPath()--"+uri.getPath());
System.out.println("type--"+intent.getType());
System.out.println("path--"+Environment.getExternalStorageState());
return;
}
switch (requestCode) {
case CAMERA_ACTIVITY:
Bundle b = intent.getExtras();
Bitmap bm = (Bitmap) b.get("data");
// mImageView.setImageBitmap(bm); // Display image in the View
// large image?
if (b.containsKey(MediaStore.EXTRA_OUTPUT)) { // large image?
Log.i(TAG, "This is a large image");
showToast(this,"Large image");
// Should have to do nothing for big images -- should already saved in MediaStore ... but
MediaStore.Images.Media.insertImage(getContentResolver(), bm, null, null);
}
else {
Log.i(TAG, "This is a small image");
showToast(this,"Small image");
MediaStore.Images.Media.insertImage(getContentResolver(), bm, null, null);
}
break;
}
}
}
I am getting all data from intent object. But i want the sd card path for the image what i am selecting to upload that image in server..
how do i get that?
You may want something like this:
Uri uri = (Uri) intent.getExtras().get("android.intent.extra.STREAM");
if ( intent.getAction().equals( Intent.ACTION_SEND ) )
{
if ( uri.getScheme().equals("content"))
{
Cursor cursor = getContentResolver().query( uri, null, null, null, null );
cursor.moveToFirst();
filePath = cursor.getString(cursor.getColumnIndexOrThrow(Images.Media.DATA));
}
}
This Code may help you
This code will pop up one Dialog Box with Camera and gallery and devices SD card to get the images path.
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import com.fanosedu.R;
public class FileAttachPopUpUtils extends Activity {
private View rootView;
private Dialog popup;
private Button Assig_PopUp_DeviceBtn;
private Button Assig_PopUp_GalaryBtn;
private Button Assi_PopUp_CameraBtn;
private Button Assig_PopUp_CancelPopupBtn;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.assignment_popupfile);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
/*
* getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
* WindowManager.LayoutParams.FLAG_FULLSCREEN);
*/
popup = new Dialog(this);
// popup.requestWindowFeature(Window.FEATURE_NO_TITLE);
// popup.getWindow().setBackgroundDrawable(new
// ColorDrawable(android.graphics.Color.TRANSPARENT));
popup.setContentView(R.layout.assignment_popupfile);
popup.setCanceledOnTouchOutside(false);
popup.show();
Assig_PopUp_DeviceBtn = (Button) popup
.findViewById(R.id.Assignment_PopUp_DeviceBtn);
Assig_PopUp_GalaryBtn = (Button) popup
.findViewById(R.id.Assignment_PopUp_GalaryBtn);
Assi_PopUp_CameraBtn = (Button) popup
.findViewById(R.id.Assignment_PopUp_CameraBtn);
Assig_PopUp_CancelPopupBtn = (Button) popup
.findViewById(R.id.Assignment_PopUp_CancelPopupBtn);
Assig_PopUp_DeviceBtn.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
/*
* Toast.makeText(FileAttachPopUpUtils.this,
* "Device File In-Progress", Toast.LENGTH_SHORT) .show();
*/
Intent intent = new Intent(FileAttachPopUpUtils.this,
FileExplore.class);
startActivity(intent);
popup.dismiss();
finish();
}
});
Assig_PopUp_GalaryBtn.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
Intent intent = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 2);
}
});
Assi_PopUp_CameraBtn.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
// ///////////////////////////////////////////////////////////////
Intent intent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
}
});
Assig_PopUp_CancelPopupBtn.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
popup.dismiss();
FileAttachPopUpUtils.this.finish();
}
});
}
#Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == this.RESULT_OK) {
if (requestCode == 1) {
/*
* Intent intent = new Intent( Intent.ACTION_PICK,
* android.provider
* .MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
* startActivityForResult(intent, 2);
*/
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
// mImage.setImageBitmap(thumbnail);
// 3
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
thumbnail.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
// 4
String name;
int n = 100000;
int rand;
rand = new Random().nextInt(n);
name = "Image-" + rand + ".jpg";
// File fileimage = new File(path, name);
File file = new File(Environment.getExternalStorageDirectory()
+ File.separator + name);
System.out.println("FILE PATH=======>>>>>>>>>>"
+ file.toString());
try {
file.createNewFile();
FileOutputStream fo = new FileOutputStream(file);
// 5
fo.write(bytes.toByteArray());
fo.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Assignments.mulPathArry.add(file.toString());
// Here You will get the full path
FileAttachPopUpUtils.this.finish();
} else if (requestCode == 2) {
Uri selectedImage = data.getData();
String[] filePath = { MediaStore.Images.Media.DATA };
Cursor c = this.getContentResolver().query(selectedImage,
filePath, null, null, null);
c.moveToFirst();
int columnIndex = c.getColumnIndex(filePath[0]);
String picturePath = c.getString(columnIndex);
c.close();
Assignments.mulPathArry.add(picturePath);
// Here you will get Path
popup.dismiss();
FileAttachPopUpUtils.this.finish();
}
}
// ///////////////////////////////////////////////////////////////////////
}
#Override
public void onBackPressed() {
return;
}
}

How to receive multiple gallery results in onActivityResult

I want to start the gallery via intent and want to get the results in my onActivityResult method.
All works fine if i click on one pic.
The question ive got now is, how do i get the results, if i choose more than one picture in the gallery?
If found hcpl´s code, which does it for one picture:
public class BrowsePicture extends Activity {
private static final int SELECT_PICTURE = 1;
private String selectedImagePath;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
((Button) findViewById(R.id.Button01))
.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// in onCreate or any event where your want the user to
// select a file
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,
"Select Picture"), SELECT_PICTURE);
}
});
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
}
}
}
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
You need to store that image path into array string then retrieve it according to your requirement.
Here is a sample code which will Pop up one Dialog box with 3 selection criteria like camera, Gallery, Device.
This may help you.
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
public class FileAttachPopUpUtils extends Activity {
private View rootView;
private Dialog popup;
private Button Assig_PopUp_DeviceBtn;
private Button Assig_PopUp_GalaryBtn;
private Button Assi_PopUp_CameraBtn;
private Button Assig_PopUp_CancelPopupBtn;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.assignment_popupfile);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
/*
* getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
* WindowManager.LayoutParams.FLAG_FULLSCREEN);
*/
popup = new Dialog(this);
// popup.requestWindowFeature(Window.FEATURE_NO_TITLE);
// popup.getWindow().setBackgroundDrawable(new
// ColorDrawable(android.graphics.Color.TRANSPARENT));
popup.setContentView(R.layout.assignment_popupfile);
popup.setCanceledOnTouchOutside(false);
popup.show();
Assig_PopUp_DeviceBtn = (Button) popup
.findViewById(R.id.Assignment_PopUp_DeviceBtn);
Assig_PopUp_GalaryBtn = (Button) popup
.findViewById(R.id.Assignment_PopUp_GalaryBtn);
Assi_PopUp_CameraBtn = (Button) popup
.findViewById(R.id.Assignment_PopUp_CameraBtn);
Assig_PopUp_CancelPopupBtn = (Button) popup
.findViewById(R.id.Assignment_PopUp_CancelPopupBtn);
Assig_PopUp_DeviceBtn.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
/*
* Toast.makeText(FileAttachPopUpUtils.this,
* "Device File In-Progress", Toast.LENGTH_SHORT) .show();
*/
Intent intent = new Intent(FileAttachPopUpUtils.this,
FileExplore.class);
startActivity(intent);
popup.dismiss();
finish();
}
});
Assig_PopUp_GalaryBtn.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
Intent intent = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 2);
}
});
Assi_PopUp_CameraBtn.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
// ///////////////////////////////////////////////////////////////
Intent intent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
}
});
Assig_PopUp_CancelPopupBtn.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
popup.dismiss();
FileAttachPopUpUtils.this.finish();
}
});
}
#Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == this.RESULT_OK) {
if (requestCode == 1) {
/*
* Intent intent = new Intent( Intent.ACTION_PICK,
* android.provider
* .MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
* startActivityForResult(intent, 2);
*/
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
// mImage.setImageBitmap(thumbnail);
// 3
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
thumbnail.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
// 4
String name;
int n = 100000;
int rand;
rand = new Random().nextInt(n);
name = "Image-" + rand + ".jpg";
// File fileimage = new File(path, name);
File file = new File(Environment.getExternalStorageDirectory()
+ File.separator + name);
System.out.println("FILE PATH=======>>>>>>>>>>"
+ file.toString());
try {
file.createNewFile();
FileOutputStream fo = new FileOutputStream(file);
// 5
fo.write(bytes.toByteArray());
fo.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Assignments.mulPathArry.add(file.toString());
// Here Your Storing the image Path each time it calls
popup.dismiss();
FileAttachPopUpUtils.this.finish();
} else if (requestCode == 2) {
Uri selectedImage = data.getData();
String[] filePath = { MediaStore.Images.Media.DATA };
Cursor c = this.getContentResolver().query(selectedImage,
filePath, null, null, null);
c.moveToFirst();
int columnIndex = c.getColumnIndex(filePath[0]);
String picturePath = c.getString(columnIndex);
c.close();
Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath));
System.out
.println("path of image from gallery......******************........."
+ picturePath);
Assignments.mulPathArry.add(picturePath);
// Here Your Storing the Image Path when each time it calls
popup.dismiss();
FileAttachPopUpUtils.this.finish();
}
}
// ///////////////////////////////////////////////////////////////////////
}
#Override
public void onBackPressed() {
return;
}
}

Categories

Resources