Note that there are some explanatory texts on larger screens.

plurals
  1. POCamera intent not working with Samsung Galaxy S3
    primarykey
    data
    text
    <p>I have an activity wherin I give the user an option to click an image from the camera, then I store this image in a byte array and in the Database. However my code does not seem to work on Samsung Galaxy S3 below is the code: </p> <p>Camera calling intent: </p> <pre><code>if (i == 0) { Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); } </code></pre> <p>On Activity method for the camera: </p> <pre><code>protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1337 &amp;&amp; resultCode == RESULT_OK) { Bundle extras = data.getExtras(); if (extras != null) { BitmapFactory.Options options = new BitmapFactory.Options(); thumbnail = (Bitmap) extras.get("data"); image(thumbnail); } else { Toast.makeText(CreateProfile.this, "Picture NOt taken", Toast.LENGTH_LONG).show(); } super.onActivityResult(requestCode, resultCode, data); } } </code></pre> <p>My image(Bitmap thumbnail) function:</p> <pre><code>public void image(Bitmap thumbnail) { Bitmap photo = thumbnail; ByteArrayOutputStream bos = new ByteArrayOutputStream(); photo.compress(Bitmap.CompressFormat.PNG, 100, bos); b = bos.toByteArray(); ImageView imageview = (ImageView)findViewById(R.id.imageView1); Bitmap bt = Bitmap.createScaledBitmap(photo, 100, 80, false); imageview.setImageBitmap(bt); } </code></pre> <p>However this was not working with Samsung S3, I changed the code to the following and now it works with Samsung S3, however it does not work with any other device. </p> <p>Camera Intent: </p> <pre><code>Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); </code></pre> <p>Activity for result: </p> <pre><code>startActivityForResult(intent, CAMERA_IMAGE_CAPTURE); protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == CAMERA_IMAGE_CAPTURE &amp;&amp; resultCode == Activity.RESULT_OK) { // Describe the columns you'd like to have returned. Selecting from the Thumbnails location gives you both the Thumbnail Image ID, as well as the original image ID String[] projection = { MediaStore.Images.Thumbnails._ID, // The columns we want MediaStore.Images.Thumbnails.IMAGE_ID, MediaStore.Images.Thumbnails.KIND, MediaStore.Images.Thumbnails.DATA}; String selection = MediaStore.Images.Thumbnails.KIND + "=" + // Select only mini's MediaStore.Images.Thumbnails.MINI_KIND; String sort = MediaStore.Images.Thumbnails._ID + " DESC"; //At the moment, this is a bit of a hack, as I'm returning ALL images, and just taking the latest one. There is a better way to narrow this down I think with a WHERE clause which is currently the selection variable Cursor myCursor = this.managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, projection, selection, null, sort); long imageId = 0l; long thumbnailImageId = 0l; String thumbnailPath = ""; try{ myCursor.moveToFirst(); imageId = myCursor.getLong(myCursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.IMAGE_ID)); thumbnailImageId = myCursor.getLong(myCursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID)); thumbnailPath = myCursor.getString(myCursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.DATA)); } finally{myCursor.close();} //Create new Cursor to obtain the file Path for the large image String[] largeFileProjection = { MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA }; String largeFileSort = MediaStore.Images.ImageColumns._ID + " DESC"; myCursor = this.managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, largeFileProjection, null, null, largeFileSort); String largeImagePath = ""; try{ myCursor.moveToFirst(); //This will actually give yo uthe file path location of the image. largeImagePath = myCursor.getString(myCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA)); } finally{myCursor.close();} // These are the two URI's you'll be interested in. They give you a handle to the actual images Uri uriLargeImage = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, String.valueOf(imageId)); Uri uriThumbnailImage = Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, String.valueOf(thumbnailImageId)); // I've left out the remaining code, as all I do is assign the URI's to my own objects anyways... // Toast.makeText(this, ""+largeImagePath, Toast.LENGTH_LONG).show(); // Toast.makeText(this, ""+uriLargeImage, Toast.LENGTH_LONG).show(); // Toast.makeText(this, ""+uriThumbnailImage, Toast.LENGTH_LONG).show(); if (largeImagePath != null) { // Toast.makeText(this, "" + largeImagePath, Toast.LENGTH_LONG).show(); BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inSampleSize = OG; // thumbnail = (BitmapFactory.decodeFile(picturePath)); thumbnail = BitmapFactory.decodeFile((largeImagePath), opts); System.gc(); if (thumbnail != null) { Toast.makeText(this, "Success", Toast.LENGTH_LONG).show(); } image(thumbnail); } if (uriLargeImage != null) { Toast.makeText(this, "" + uriLargeImage, Toast.LENGTH_LONG).show(); } if (uriThumbnailImage != null) { Toast.makeText(this, "" + uriThumbnailImage, Toast.LENGTH_LONG).show(); } } </code></pre> <p>This is my image() function: </p> <pre><code>public void image(Bitmap thumbnail) { b = null; Bitmap photo = thumbnail; ByteArrayOutputStream bos = new ByteArrayOutputStream(); photo.compress(Bitmap.CompressFormat.PNG, 100, bos); b = bos.toByteArray(); if (b != null) { Toast.makeText(this, "Success Yeah" + b, Toast.LENGTH_LONG).show(); } } </code></pre> <p>While as all the three 1)uriLargeImage 2)largeImagePath 3)uriThumbnailImage return me the path or URI I am unable to set the created bitmap to my ImageView. However this is the case with Samsung S3 only, if I run the above edited code with any other device, the program crashes. </p> <p>In the manifest I have used </p> <pre><code>android:configChanges="keyboardHidden|orientation" </code></pre> <p>Based on the tutorial: <a href="http://kevinpotgieter.wordpress.com/2011/03/30/null-intent-passed-back-on-samsung-galaxy-tab/">http://kevinpotgieter.wordpress.com/2011/03/30/null-intent-passed-back-on-samsung-galaxy-tab/</a></p> <p>However if I take the picture in Landscape mode, everything works fine! I am puzzled!! (In Samsung S3)</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload