调用系统拍照 // 如果点击的是拍照按钮 case R.id.btn_map_camera: { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, CAMERA_REQUESTCODE); } break; // 调用系统的方法,进入拍照界面 /** * 回调和拍照功能 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); try { switch (requestCode) { case CAMERA_REQUESTCODE: if (resultCode == Activity.RESULT_OK && data != null) { Bitmap image = (Bitmap) data.getExtras().get("data"); ByteArrayOutputStream bos = new ByteArrayOutputStream(); image.compress(CompressFormat.JPEG, 100, bos); byte[] imagebytes = bos.toByteArray();// 照片信息 // 这里开始的第二部分,获取图片的路径: String[] proj = { MediaStore.Images.Media.DATA }; // 好像是android多媒体数据库的封装接口,具体的看Android文档 Cursor cursor = managedQuery(originalUri, proj, null, null, null); // 按我个人理解 这个是获得用户选择的图片的索引值 int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); // 将光标移至开头 ,这个很重要,不小心很容易引起越界 cursor.moveToFirst(); // 最后根据索引值获取图片路径 String path = cursor.getString(column_index); File f = new File(path); if(f.exists()){ f.delete(); Bundle bundle = new Bundle(); bundle.putByteArray(CameraActivity.IMAGE_BUFFER, imagebytes); Intent intent = new Intent(); intent.putExtras(bundle); intent.setClass(MapActivity.this, CameraActivity.class); startActivity(intent); } break; default: break; } } catch (Exception e) { e.printStackTrace(); } }