调用系统相机相册录像机demo

点击事件

@Override
    public void onClick(View v) {        
        switch (v.getId()) {          
            case R.id.camera_EditQuestionActivity:
                //拍照
                Intent intentFromCapture = new Intent(
                        MediaStore.ACTION_IMAGE_CAPTURE);
                String sdState = Environment.getExternalStorageState();
                if (!sdState.equals(Environment.MEDIA_MOUNTED)) {
                    Toast.makeText(this, "没有安装内存卡,无法存储图片", Toast.LENGTH_LONG).show();
                    return;
                }
                fileUri = FileUtils.getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
                intentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

                startActivityForResult(intentFromCapture,
                        CAMERA_REQUEST_CODE);
                break;
            case R.id.video_EditQuestionActivity:
                Intent intentVideo = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
                //设置视频质量
                intentVideo.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0.9);
                //限制时长
//                intentVideo.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 5);
                // 限制大小
                intentVideo.putExtra(MediaStore.EXTRA_SIZE_LIMIT, 1080 * 720);
                startActivityForResult(intentVideo, VIDEO_REQUEST_CODE);
                break;
            case R.id.voice_EditQuestionActivity:
                Intent intentRecord = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);
                startActivityForResult(intentRecord, RECORDER_REQUEST_CODE);
                break;
            case R.id.photo_EditQuestionActivity:
                Intent intentFromGallery = new Intent(
                        Intent.ACTION_PICK,
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                intentFromGallery.setType("image/*;video/*");
                startActivityForResult(intentFromGallery,
                        PHOTO_REQUEST_CODE);
                break;
        }
    }
@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        //结果码不等于取消时候
        if (resultCode != this.RESULT_CANCELED) {
            switch (requestCode) {
                case PHOTO_REQUEST_CODE:
                    Uri photoUri = data.getData();
                    String[] proj = {MediaStore.Images.Media.DATA};
                    Cursor photoCursor = managedQuery(photoUri, proj, null, null, null);
                    Uri fileUri;
                    if (photoCursor != null) {
                        int actual_image_column_index = photoCursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                        photoCursor.moveToFirst();
                        String img_path = photoCursor.getString(actual_image_column_index);
                        File cameraFile = new File(img_path);
                        fileUri = Uri.fromFile(cameraFile);
                    } else {
                        fileUri = photoUri;
                    }
                    String fileFormat = fileUri.toString().substring(fileUri.toString().lastIndexOf(".") + 1).toLowerCase();
                    Bitmap bitmapPhoto;
//                    MyLog.e("kkk", "EditQuestion--DCIM=" + fileUri.toString());
                    if ("mp4".equals(fileFormat) | "m4a".equals(fileFormat) | "3gp".equals(fileFormat)) {
                        videoPath = fileUri.getPath();
                        bitmapVideo = getVideoThumbnail(fileUri.getPath(), 400, 400, 96);
                        saveBitmapfile(bitmapVideo);
                        video_question_EditQuestionActivity.setImageBitmap(bitmapVideo);
                        video_question_EditQuestionActivity.setVisibility(View.VISIBLE);
                        play_videoquestion.setVisibility(View.VISIBLE);
                    } else if ("jpg".equals(fileFormat) | "png".equals(fileFormat) | "jpeg".equals(fileFormat)) {
                        if (list.size() <= 8) {
                            bitmapPhoto = createThumbnail(fileUri.getPath(), 500, 500);
                            list.add(bitmapPhoto);
                            adapter.setData(list);
                            bitmapPhoto = null;
                        } else {
                            //Toast
                        }
                    }
                    break;
                case CAMERA_REQUEST_CODE:
                    if (list.size() <= 8) {
                        mediaFile = getImgFile();
                        Uri cameraUri = Uri.fromFile(mediaFile);
                        Bitmap bitmapCamera = createThumbnail(cameraUri.getPath(), 500, 500);
                        list.add(bitmapCamera);
                        adapter.setData(list);
                        bitmapCamera = null;
                    } else {
                        Toast.makeText(this, "最多只能上传9张图片", Toast.LENGTH_SHORT).show();
                    }
                    break;
                case VIDEO_REQUEST_CODE:
                    String[] projVideo = {MediaStore.Images.Media.DATA};
                    Cursor videoCursor = managedQuery(data.getData(), projVideo, null, null, null);
                    Uri videoUri;
                    if (videoCursor != null) {
                        int actual_image_column_index = videoCursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                        videoCursor.moveToFirst();
                        String img_path = videoCursor.getString(actual_image_column_index);
                        File fileVideo = new File(img_path);
                        videoUri = Uri.fromFile(fileVideo);
                    } else {
                        videoUri = data.getData();
                    }
                    videoPath = videoUri.getPath();

                    bitmapVideo = getVideoThumbnail(videoPath, 400, 400, 96);
                    saveBitmapfile(bitmapVideo);                    
                    bitmapVideo = null;
                    break;
                case RECORDER_REQUEST_CODE:
                    String[] projAudio = {MediaStore.Images.Media.DATA};
                    Cursor audioCursor = managedQuery(data.getData(), projAudio, null, null, null);
                    Uri audioUri;
                    if (audioCursor != null) {
                        int actual_image_column_index = audioCursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                        audioCursor.moveToFirst();
                        String img_path = audioCursor.getString(actual_image_column_index);
                        File fileVideo = new File(img_path);
                        audioUri = Uri.fromFile(fileVideo);
                    } else {
                        audioUri = data.getData();
                    }
                    audioPath = audioUri.getPath();
                    final MediaPlayer mp = MediaPlayer.create(getApplicationContext(), audioUri);
                    break;
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
public File getImgFile() {
    File ret = null;
    File mediaStorageDir = new File(Environment.getExternalStorageDirectory(), "YYEKT");
    ret = new File(mediaStorageDir.getAbsolutePath() +
            "/IMG" +".png");
    return ret;
}

/**
 * 对图片进行二次采样,生成缩略图。放置加载过大图片出现内存溢出
 */
private Bitmap createThumbnail(String filePath, int newWidth, int newHeight) {
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(filePath, options);
    int originalWidth = options.outWidth;
    int originalHeight = options.outHeight;

    int ratioWidth = originalWidth / newWidth;
    int ratioHeight = originalHeight / newHeight;

    options.inSampleSize = ratioHeight > ratioWidth ? ratioHeight
            : ratioWidth;
    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeFile(filePath, options);
}

private Bitmap getVideoThumbnail(String videoPath, int width, int height,
                                 int kind) {
    Bitmap bitmap = null;
    // 获取视频的缩略图
    bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, kind);
    bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,
            ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
    return bitmap;
}

private boolean saveBitmapfile(Bitmap bmp) {
    Bitmap.CompressFormat format = Bitmap.CompressFormat.JPEG;
    int quality = 100;
    OutputStream stream = null;
    try {
        stream = new FileOutputStream(Environment.getExternalStorageDirectory() +"videoImage.jpg");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    return bmp.compress(format, quality, stream);
}

private File getBitmapfile(Bitmap bmp) {
    Bitmap.CompressFormat format = Bitmap.CompressFormat.JPEG;
    int quality = 100;
    OutputStream stream = null;
    try {
     stream=new FileOutputStream(Environment.getExternalStorageDirectory()+ ".jpg");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    bmp.compress(format, quality, stream);
    return new File(Environment.getExternalStorageDirectory()+ (num) + ".jpg");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值