Mostly we require to get an image from camera or gallery in our apps ,So here how to go about it :-
Tested this code on 5.1 android lolipop works fine hope this helps all :-)
1. CameraActivity.java
public class CameraActivity extends Activity {2. camera.xml
Uri outputFileUri;
String selectedImagePath = "";
ImageView mUserImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.camera);
initiViews();
}
private void initiViews() {
mUserImage = (ImageView) findViewById(R.id.mUserImage);
mUserImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
popmenu();
}
});
}
void popmenu() {
final Dialog dialog = new Dialog(CameraActivity.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.cameradialog);
dialog.getWindow().setBackgroundDrawable(
new ColorDrawable(android.graphics.Color.TRANSPARENT));
Button mCamerabtn = (Button) dialog.findViewById(R.id.cameradialogbtn);
Button mGallerybtn = (Button) dialog
.findViewById(R.id.gallerydialogbtn);
Button btnCancel = (Button) dialog.findViewById(R.id.canceldialogbtn);
dialog.getWindow().setLayout(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT);
mCamerabtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(Environment.getExternalStorageDirectory(),
"test.jpg");
outputFileUri = Uri.fromFile(file);
Log.d("TAG", "outputFileUri intent" + outputFileUri);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, 0);
dialog.cancel();
}
});
mGallerybtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, 1);
dialog.cancel();
}
});
btnCancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.cancel(); // dismissing the popup
}
});
dialog.show();
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 0:
if (resultCode == RESULT_OK) {
Log.d("TAG", "outputFileUri RESULT_OK" + outputFileUri);
if (outputFileUri != null) {
Bitmap bitmap;
bitmap = decodeSampledBitmapFromUri(outputFileUri,
mUserImage.getWidth(), mUserImage.getHeight());
if (bitmap == null) {
Toast.makeText(
getApplicationContext(),
"the image data could not be decoded"
+ outputFileUri.getPath(),
Toast.LENGTH_LONG).show();
} else {
selectedImagePath = getRealPathFromURI(CameraActivity.this,outputFileUri);// outputFileUri.getPath().
Toast.makeText(
getApplicationContext(),
"Decoded Bitmap: " + bitmap.getWidth() + " x "
+ bitmap.getHeight()
+ outputFileUri.getPath(),
Toast.LENGTH_LONG).show();
mUserImage.setImageBitmap(bitmap);
}
}
}
break;
case 1:
if (resultCode == RESULT_OK) {
Uri targetUri = data.getData();
Log.d("TAG", "datae" + targetUri);
Bitmap bitmap;
bitmap = decodeSampledBitmapFromUri(targetUri,
mUserImage.getWidth(), mUserImage.getHeight());
if (bitmap == null) {
Toast.makeText(
getApplicationContext(),
"the image data could not be decoded"
+ targetUri.getPath(), Toast.LENGTH_LONG)
.show();
} else {
selectedImagePath = getPath(targetUri);// targetUri.getPath();
Toast.makeText(
getApplicationContext(),
"Decoded Bitmap: " + bitmap.getWidth() + " x "
+ bitmap.getHeight() + targetUri.getPath(),
Toast.LENGTH_LONG).show();
mUserImage.setImageBitmap(bitmap);
}
}
break;
default:
break;
}
}
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);
}
public String getRealPathFromURI(Context context, Uri contentUri) {
Cursor cursor = null;
try {
if("content".equals(contentUri.getScheme())) {
String[] proj = {MediaStore.Images.Media.DATA};
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);
}
else{
return contentUri.getPath();
}
} finally {
if (cursor != null) {
cursor.close();
}
}
}
public Bitmap decodeSampledBitmapFromUri(Uri uri, int reqWidth,
int reqHeight) {
Bitmap bm = null;
try {
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(getContentResolver()
.openInputStream(uri), null, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth,
reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
bm = BitmapFactory.decodeStream(getContentResolver()
.openInputStream(uri), null, options);
} catch (FileNotFoundException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), e.toString(),
Toast.LENGTH_LONG).show();
}
return bm;
}
public int calculateInSampleSize(BitmapFactory.Options options,
int reqWidth, int reqHeight) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
if (width > height) {
inSampleSize = Math.round((float) height / (float) reqHeight);
} else {
inSampleSize = Math.round((float) width / (float) reqWidth);
}
}
return inSampleSize;
}
}
<?xml version="1.0" encoding="utf-8"?>3. cameradialog.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/mUserImage"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:src="@drawable/ic_launcher" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:background="@drawable/roundshape"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@null"
android:padding="10dp"
android:text="Blog Box"
android:textSize="20sp"
android:textStyle="bold" />
<View
android:layout_width="fill_parent"
android:layout_height="4dp"
android:layout_marginLeft="4dp"
android:background="#000000"
android:layout_marginRight="4dp" />
<Button
android:id="@+id/cameradialogbtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="4dp"
android:layout_weight=".3"
android:background="@null"
android:padding="5dp"
android:text="Take a picture from camera"
android:textSize="18sp" >
</Button>
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:layout_marginLeft="4dp"
android:background="#000000"
android:layout_marginRight="4dp"
/>
<Button
android:id="@+id/gallerydialogbtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="4dp"
android:layout_weight=".3"
android:background="@null"
android:padding="5dp"
android:text="Choose from gallery"
android:textSize="18sp" >
</Button>
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="#000000"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp" />
<Button
android:id="@+id/canceldialogbtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="4dp"
android:layout_weight=".3"
android:background="@null"
android:padding="5dp"
android:text="No thanks"
android:textSize="18sp" >
</Button>
</LinearLayout>
4. Drawable : roundshape.xml
<?xml version="1.0" encoding="utf-8"?>Output :
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<stroke
android:width="2dp"
android:color="#FFFFFF" />
<corners android:radius="10dp" />
<gradient
android:angle="270"
android:centerColor="#FFFFFF"
android:endColor="#f9d7f2"
android:startColor="#f9d7f2" />
</shape>
what is test.jpg. where it is locate.
ReplyDelete