实现打开Android系统相册、照相机并实现照相,录像功能。

通过本篇博客,你将学到以下知识点:
1.学会如何打开Android系统中相册的图片,视频,并使用这些图片,视频。
2.学会如何打Android开照相机进行照相,录像,并使用这样图片和视频。
下面我将展示两种方法来实现这些需求,注意:以下代码要用真机测试才行。
效果展示先:

这里写图片描述

一. 第一种方法:
①.想顺利的打开Android手机中的相册和照相机,首先我们要在清单中注册一些权限:

 <!--使用相机硬件的权限-->
    <uses-permission android:name="android.permission.CAMERA"/>
    <!--录音的权限-->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <!--过滤不支持相机的设备-->
    <uses-feature android:name="android.hardware.Camera"/>

②.MainActivity的代码:

/**
 * 通过相机拍照返回的Bitmap有两种方式:
 * 1.不传入MediaStore.EXTRA_OUTPUT时,直接由data返回一个缩略图
 * 2.当传入MediaStore.EXTRA_OUTPUT时,可以通过设置的图片保存路径来获取完整图片
 */
public class MainActivity extends AppCompatActivity {
   

    private ImageView iv;

    private VideoView videoView;

    private final static int FLAG_REQUEST_SYSTEM_IMAGE = 0;

    private final static int FLAG_REQUEST_CAMERA_IMAGE = 1;

    private final static int FLAG_REQUEST_CAMERA_VIDEO = 2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv = (ImageView) findViewById(R.id.iv);
        videoView = (VideoView) findViewById(R.id.video);
    }

    public void doclick(View view) {
        switch (view.getId()) {
            case R.id.btn_pick_imager:
                // TODO 选取系统相册图片
                doPickImageFromSystem();
                break;
            case R.id.btn_open_pick_imager:
                // TODO 打开相机拍照
                doOpenCameraForImage();
                break;
            case R.id.btn_open_pick_video:
                // TODO 打开相机录像
                doOpenCameraForVideo();
                break;
        }
    }

    private void doPickImageFromSystem() {
        /**
         * 参数一:打开系统相册的ACTION
         * 参数二:返回数据的方式(从系统相册的数据库获取)
         */
        Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(intent, FLAG_REQUEST_SYSTEM_IMAGE);
    }

    private void doOpenCameraForImage() {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        //todo 仅当设置了MediaStore.EXTRA_OUTPUT参数时,系统将不再返回缩略图,而是会被完整保存以下路径
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File("/sdcard/test.jpg")));

        startActivityForResult(intent,FLAG_REQUEST_CAMERA_IMAGE);
    }

    private void doOpenCameraForVideo() {
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值