在多媒體應用制作中,我們經常會用到camera,那么到底如何調用系統的camera呢:
1.調用相機:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
只需要把這兩句代碼寫進button的onclick事件中即可。
2. 存儲照片:
//使用此方法,以文件形式存儲照片
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
int i = 0;
if (resultCode == Activity.RESULT_OK) {
String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 檢測sd是否可用
Log.v("TestFile",
"SD card is not avaiable/writeable right now.");
return;
}
Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap) bundle.get("data");// 獲取相機返回的數據,並轉換為Bitmap圖片格式
FileOutputStream b = null;
File file = new File("/sdcard/myImage/");
file.mkdirs();// 創建文件夾,名稱為myimage
//照片的命名,目標文件夾下,以當前時間數字串為名稱,即可確保每張照片名稱不相同。網上流傳的其他Demo這里的照片名稱都寫死了,則會發生無論拍照多少張,后一張總會把前一張照片覆蓋。細心的同學還可以設置這個字符串,比如加上“IMG”字樣等;
然后就會發現sd卡中myimage這個文件夾下,會保存剛剛調用相機拍出來的照片,照片名稱不會重復。
String str=null;
Date date=null;
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");//獲取當前時間,進一步轉化為字符串
date =new Date();
str=format.format(date);
String fileName = "/sdcard/myImage/"+str+".jpg";
try {
b = new FileOutputStream(fileName);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把數據寫入文件
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
b.flush();
b.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//注意要加上幾個權限
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />