Android呼叫系統相簿和系統相機拍照
阿新 • • 發佈:2019-02-06
呼叫系統相機拍照: intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, RESULT_CAMARA_IMAGE); // RESULT_CAMARA_IMAGE:Activity的標誌。自已定義 呼叫系統相簿: intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, RESULT_LOAD_IMAGE); // RESULT_LOAD_IMAGE:Activity的標誌。自已定義 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(resultCode==RESULT_OK && requestCode==TAKE_PICTURE){ camara(data); //呼叫下面的方法 } } 下面是在onActivityResult()中呼叫的兩個方法: /** * 呼叫系統相簿的操作,在onActivityResult中呼叫 * * @param data * onActivityResult中的Intent */ public Bitmap map(Intent data) { Uri selectedImage = data.getData(); String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = mContext.getContentResolver().query(selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); cursor.close(); Log.d("picturePath", picturePath); return BitmapFactory.decodeFile(picturePath); } /** * 呼叫系統相機,在onActivityResult中呼叫,拍照後儲存到sdcard卡中 * * @param data * onActivityResult中的Intent * @return */ public Bitmap camara(Intent data) { String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 檢測sd是否可用 Log.i("TestFile", "SD card is not avaiable/writeable right now."); Toast.makeText(mContext, "SD card is not avaiable/writeable right now.", Toast.LENGTH_LONG).show(); return null; } String name = new DateFormat().format("yyyyMMdd_hhmmss", Calendar.getInstance(Locale.CHINA)) + ".jpg"; Bundle bundle = data.getExtras(); Bitmap bitmap = (Bitmap) bundle.get("data"); FileOutputStream b = null; File file = new File("sdcard/DCIM/Camera/"); file.mkdirs();// 建立資料夾 String fileName = "sdcard/DCIM/Camera/" + name; 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(); } } return bitmap; }