java - How to reliably take a photo in Android? -
i trying take photo in android app, convert jpeg, upload web service. far got following:
private static final int camera_request = 1888; private void takephoto() { intent cameraintent = new intent(android.provider.mediastore.action_image_capture); startactivityforresult(cameraintent, camera_request); } @override protected void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); switch (requestcode) { case camera_request: bitmap photo = (bitmap) data.getextras().get("data"); bytearrayoutputstream bos = new bytearrayoutputstream(); photo.compress(bitmap.compressformat.jpeg, 90, bos); byte [] bitmapdata = bos.tobytearray(); char [] dataaschar = new string(bitmapdata ).tochararray(); url url = new url("http://www.foo.com/bar); urlconnection conn = url.openconnection(); conn.setdooutput(true); conn.setrequestproperty("content-type", "application/octet-stream"); outputstreamwriter wr = new outputstreamwriter(conn.getoutputstream()); wr.write(dataaschar); wr.flush(); // response bufferedreader rd = new bufferedreader(new inputstreamreader(conn.getinputstream())); string line; while ((line = rd.readline()) != null) { // process line... } wr.close(); rd.close(); break; } } the seems work, e.g. doesn't crash. in bitmap photo variable. compress using bytearrayoutputstream , becomes 5103 bytes (in buffer). convert char array (so can sent) , char array becomes 4758 elements. not sure why (probably line char [] dataaschar = new string(data).tochararray();). , of course once image makes on other side it's corrupted.
what missing here?
edit. per suggestion @digitaljoel, chucked outputstreamwriter , replaced
outputstream os = conn.getoutputstream(); os.write(data);
new string(bitmapdata ).tochararray() seems bad idea me. don't think can expect bytes jpeg shoved string without corruption happening. so, why not write bytes outputstream instead of wrapping in outputstreamwriter?
Comments
Post a Comment