Android官方开发文档Training系列课程中文版:调用相机之简单摄像

简介: 原文地址:http://android.xsoftlab.net/training/camera/videobasics.html这节课解释了如何通过已有的相机应用拍摄视频。假设你的程序含有摄像功能,但是它只是程序很小的一部分功能,你并不想在这么小的功能上花费很大的精力。

原文地址:http://android.xsoftlab.net/training/camera/videobasics.html

这节课解释了如何通过已有的相机应用拍摄视频。

假设你的程序含有摄像功能,但是它只是程序很小的一部分功能,你并不想在这么小的功能上花费很大的精力。幸运的是,大多数的安卓设备已经内置了一款相机应用,并且它可以拍摄视频。这节课将会展示如何拍摄视频。

请求相机权限

为了告知系统程序是基于相机的,需要在清单文件中添加 标签。

<manifest ... >
    <uses-feature android:name="android.hardware.camera"
                  android:required="true" />
    ...
</manifest>

如果程序需要使用,但是为了整个功能而不强制要求相机,那么可以设置android:required为false。这样做的话,Google Play会允许不带相机的设备下载你的程序。不过你有责任需要在运行时通过调用hasSystemFeature(PackageManager.FEATURE_CAMERA)方法检查设备上的相机是否可用。如果相机是不可用的,你应该禁用掉与相机相关的功能。

通过相机APP摄像

Android通过授权的方式让其他程序通过调用一个Intent来描述你想要做的事情。这个过程包含了三块:Intent本身,一个启动外部Activity的调用,以及一些当焦点返回Activity时处理图像数据的代码。

下面代码的功能用于调用一个意图来捕获视频:

static final int REQUEST_VIDEO_CAPTURE = 1;
private void dispatchTakeVideoIntent() {
    Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
    }
}

要注意,startActivityForResult()方法被一个调用resolveActivity()方法的条件所保护,这个方法返回了可以处理这个Intent的第一个Activity组件。执行这项检查是非常重要的,因为如果你调用startActivityForResult()方法所使用的Intent没有APP可以处理的话,那么你的APP将会崩溃。所以只要结果不是null,那么就意味着可以安全使用这个Intent。

查看视频

Android的相机应用会通过onActivityResult()方法将视频返回,视频位于onActivityResult()方法的回调参数Intent中的Uri所指向的位置。下面的代码展示了接收这个视频并且在VideoView中播放它。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) {
        Uri videoUri = intent.getData();
        mVideoView.setVideoURI(videoUri);
    }
}
目录
相关文章
|
4月前
|
XML Java Android开发
Android Studio App开发之使用相机拍摄照片和从相册中选取图片(附源码 超详细必看)
Android Studio App开发之使用相机拍摄照片和从相册中选取图片(附源码 超详细必看)
179 0
|
23天前
|
Android开发
Android调用相机与相册的方法2
Android调用相机与相册的方法
17 0
|
1月前
|
Java Android开发
Android开发系列全套课程
本系列课程面向有java基础,想进入企业从事android开发的计算机专业者。学习搭配实战案例,高效掌握岗位知识。
18 1
|
3月前
|
存储 前端开发 测试技术
Android 官方架构中的 UseCase 该怎么写?
Android 官方架构中的 UseCase 该怎么写?
66 0
|
6月前
|
Android开发
[笔记]Android开发之相机开发 Camera1、2、X
[笔记]Android开发之相机开发 Camera1、2、X
|
Java Android开发
android 7.1 屏蔽按压两次电源键(KEYCODE_POWER)打开相机
android 7.1 屏蔽按压两次电源键(KEYCODE_POWER)打开相机
213 0
|
9月前
|
存储 SQL JSON
Android入门教程 (零)付费专栏课程规划
Android入门教程 (零)付费专栏课程规划
|
小程序 物联网 Java
Android 蓝牙BLE开发从官方源码demo开始(一)
Android 蓝牙BLE开发从官方源码demo开始(一)
|
10月前
|
SQL 数据库 Android开发
Android官方数据库框架-Room
Android官方数据库框架-Room
589 0
|
Android开发
Android官方下拉刷新控件SwipeRefreshLayout
Android官方下拉刷新控件SwipeRefreshLayout
610 0
Android官方下拉刷新控件SwipeRefreshLayout