標籤:android style blog http color 使用 os 檔案
android調用系統相機拍照並儲存圖片
調用系統相機:
//在某個事件中添加如下代碼即可,不是說單擊事件都不會寫啊
startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE),1);
解釋:其中參數MediaStore.ACTION_IMAGE_CAPTURE是調用系統相機用的,而後面的1則是請求的Activity的標誌,用來處理返回結果的
可以理解為:給系統相機的Activity添加一個請求標誌,在用onActivityResult處理返回結果時,有一個與這個標誌相對應的處理方案
儲存圖片:
// 使用startActivityForResult返回結果時調用的方法 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // 如果傳回值是正常的話 if (resultCode == Activity.RESULT_OK) { // 驗證請求碼是否一至,也就是startActivityForResult的第二個參數 switch (requestCode) { case 1: saveCameraImage(data); break; default: break; } } } /** 儲存相機的圖片 **/ private void saveCameraImage(Intent data) { // 檢查sd card是否存在 if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { Log.i(TAG, "sd card is not avaiable/writeable right now."); return; } // 為圖片命名啊 String name = new DateFormat().format("yyyymmdd", Calendar.getInstance(Locale.CHINA)) + ".jpg"; Bitmap bmp = (Bitmap) data.getExtras().get("data");// 解析返回的圖片成bitmap // 儲存檔案 FileOutputStream fos = null; File file = new File("/mnt/sdcard/test/"); file.mkdirs();// 建立檔案夾 String fileName = "/mnt/sdcard/test/" + name;// 儲存路徑 try {// 寫入SD card fos = new FileOutputStream(fileName); bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { fos.flush(); fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }// 顯示圖片 ((ImageView) findViewById(R.id.show_image)).setImageBitmap(bmp); }
最重要的是:不要忘記添加許可權哦
<uses-permission android:name="android.permission.CAMERA" /><!-- 相機 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 寫入sdcard -->
參考:http://blog.csdn.net/bill_ming/article/details/7730305