Android mobile phones have their own cameras and libraries. Our projects sometimes use uploading images to the server. Today we have a project that uses this function, so I recorded my code and shared it with you. For the first time I wrote a blog, I hope you will criticize me a lot.
First, the code for calling android album and camera is as follows:
Copy codeThe Code is as follows: Intent intent = new Intent (MediaStore. ACTION_IMAGE_CAPTURE); // call the camera that comes with android
PhotoUri = MediaStore. Images. Media. EXTERNAL_CONTENT_URI;
StartActivityForResult (intent, 1 );
Copy codeThe Code is as follows: Intent I = new Intent (Intent. ACTION_PICK,
Android. provider. MediaStore. Images. Media. EXTERNAL_CONTENT_URI); // calls the android Image Library.
StartActivityForResult (I, 2 );
Copy codeThe Code is as follows: @ Override
Protected void onActivityResult (int requestCode, int resultCode, Intent data ){
// Call this method back after photography is completed
Super. onActivityResult (requestCode, resultCode, data );
Case 1:
Switch (resultCode ){
Case Activity. RESULT_ OK: // after taking the photo, click OK.
String sdStatus = Environment. getExternalStorageState ();
If (! SdStatus. equals (Environment. MEDIA_MOUNTED) {// check whether sd is available
Log. v ("TestFile", "SD card is not avaiable/writeable right now .");
Return ;}
Bundle bundle = data. getExtras ();
Bitmap bitmap = (Bitmap) bundle. get ("data"); // obtain the data returned by the camera and convert it to the Bitmap image format.
FileOutputStream B = null;
File file = new File ("/sdcard/pk4fun /");
File. mkdirs (); // create a folder named pk4fun // name of the photo. In the target folder, use the current time string as the name to ensure that the name of each photo is different. The names of all the photos in other demos that are circulating on the Internet are dead. No matter how many photos are taken, the last one will always overwrite the previous one. Careful students can also set this string, such as adding the word "IMG". Then, they will find that the folder "myimage" in the SD card will save the photos just taken by calling the camera, the photo name will not be repeated.
String str = null;
Date date = null;
SimpleDateFormat format = new SimpleDateFormat ("yyyyMMddHHmmss"); // obtain the current time and further convert it to a string
Date = new Date (resultCode );
Str = format. format (date );
String fileName = "/sdcard/myImage/" + str + ". jpg ";
SendBroadcast (fileName );
Try {
B = new FileOutputStream (fileName );
Bitmap. compress (Bitmap. CompressFormat. JPEG, 100, B); // write data to a file
} Catch (FileNotFoundException e ){
E. printStackTrace ();
} Finally {
Try {
B. flush ();
B. close ();
} Catch (IOException e ){
E. printStackTrace ();
}
} Break;
Case Activity. RESULT_CANCELED: // cancel
Break;
}
Break;
Case 2:
Switch (resultCode ){
Case Activity. RESULT_ OK :{
Uri uri = data. getData ();
Cursor cursor = mActivity. getContentResolver (). query (uri, null,
Null, null, null );
Cursor. moveToFirst ();
String imgNo = cursor. getString (0); // Image number
String imgPath = cursor. getString (1); // path of the image file
String imgSize = cursor. getString (2); // image size
String imgName = cursor. getString (3); // Image File Name
Cursor. close ();
// Options options = new BitmapFactory. Options ();
// Options. inJustDecodeBounds = false;
// Options. inSampleSize = 10;
// Bitmap bitmap = BitmapFactory. decodeFile (imgPath, options );
}
Break;
Case Activity. RESULT_CANCELED: // cancel
Break;
}
Break;
}
Remember to add permissions
<Uses-permission android: name = "android. permission. MOUNT_UNMOUNT_FILESYSTEMS"/>
<Uses-permission android: name = "android. permission. WRITE_EXTERNAL_STORAGE"/>
<Uses-permission android: name = "android. permission. CAMERA"/>
<Uses-permission android: name = "android. permission. RECORD_AUDIO"/>
<Uses-permission android: name = "android. permission. WRITE_EXTERNAL_STORAGE"/>