Here I have written the code for image picker from gallery, but
can anyone tell me what is the roll of setAction() and addCategory() ?
There are a lots of "static final String" available in Intent Class file, I am totally unaware of using these ACTION and CATEGORY parameters in my program
public class ImagePicker extends BaseActivity implements View.OnClickListener {
private final int PICK_FROM_GALLERY_REQUEST = 1;
private ImageView pickedImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.onStart();
setContentView(R.layout.activity_image_picker);
pickedImage= (ImageView) findViewById(R.id.image);
Button cameraButton= (Button) findViewById(R.id.pick_from_camera);
Button galleryButton= (Button) findViewById(R.id.pick_from_gallery);
cameraButton.setOnClickListener(this);
galleryButton.setOnClickListener(this);
setViewHeight(pickedImage);
}
private void setViewHeight(ImageView pickedImage) {
DisplayMetrics displayMetrics=getResources().getDisplayMetrics();
pickedImage.getLayoutParams().height=displayMetrics.heightPixels/2;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==PICK_FROM_GALLERY_REQUEST && resultCode==RESULT_OK && data!=null){
InputStream stream = null;
try {
stream = getContentResolver().openInputStream(
data.getData());
Bitmap bitmap = BitmapFactory.decodeStream(stream);
stream.close();
pickedImage.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.pick_from_gallery:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(intent, PICK_FROM_GALLERY_REQUEST);
break;
case R.id.pick_from_camera:
break;
}
}
Intent.setAction is used to determine what kind of action do you want the intent receiving application to do. In your case you want to get some data, specifically an image; so you say this to Android by using setAction() and passing the argument as ACTION_GET_CONTENT. For instance, if you wanted to send an image rather than receive one, you would have passed ACTION_SEND, ACTION_SENDTO or ACTION_SEND_MULTIPLE. Intent.ACTION simply gives you a chance to specify the function or action that the intent receiving app must be capable to do according to your needs.
Intent.CATEGORY is another specification you can add to your intent. In your case OPENABLE denotes that the data you want to receive can be opened as a File object i.e. with read and write permissions and have complete access to the physical location of the data(in your case the image file). Remember that this means you will need to request the storage-permissions before hand and this category will cause a raise in your securities. If you just need to display the image and do not need to manipulate the image file physically, DON'T USE this category. If you want to manipulate the image and store it SEPARATELY consider making a separate copy of the image and manipulate that copy in your own ExternalStorage provided by Android.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With