`
tempsitegoogle
  • 浏览: 881708 次
文章分类
社区版块
存档分类
最新评论

android 多媒体和相机详解五

 
阅读更多

相机

  Android框架架包含了各种相机和相机功能的支持,使你可以在你的应用中捕获图像和视频.本文档讨论一个简单快速的获取图像和视频的方法,并概述一个创建自定义用户相机体验的高级方法.

想一想

  在使你的应用能使用设备上的相机之前,你应该先想一想你的应用将来会如何使用此硬件.

  • Camera必须-相机是必须的,你不希望你的应用安装到一个没有相机的设备上.你应该在manifest文件中声明需要相机.

  • 快速图像或自定义特性-你的应用将如何使用相机?你仅仅是抓取一个快速图片或视频剪辑,还是提供一个新的使用方式?前者请考虑使用现有的相机应用.后者请阅读后面的"创建一个相机应用"一节.

  • 存储 -你的应用产生的图像和视频要给自己看还是共享给其它应用?你想在你的应用被删除后所创建的图像和视频仍然存在吗?请阅读后面的"保存媒体文件"一节来学习如何实现这些操作.


基础知识

  Android框架支持通过CameraAPICemeraintent来抓取图像和视频.下面就是相关的类们:

  • Camera

    此类是控制设备相机的主要API.此类用于在创建相机应用时获取图片和视频.

  • SurfaceView

    此类为用户提供camera的实时图像预览.

  • MediaRecorder

    此类用于从camera录制视频.

  • Intent

    一个MediaStore.ACTION_IMAGE_CAPTUREMediaStore.ACTION_VIDEO_CAPTURE型的intent,可以使用它来抓取图像或视频,而不用操作Camera对象们.


Manifest中的声明

  在使用CameraAPI开发你的应用之前,你需保证在你的manifest中声明了合适的条目使得有权使用相机和其它相关特性.

  • CameraPermission - 你的应用必须请求使用设备相机的取限.

    <uses-permissionandroid:name="android.permission.CAMERA" />

    注:如果你通intent使用camera,你的应用不必请求此权限.

  • CameraFeatures - 你的应用必须也要声明要使用的相机特性,比如:

    <uses-featureandroid:name="android.hardware.camera" />

    对于相机特性列表,请见manifestFeatures Reference

      添加相机特性到你的manifest导致Android市场不会将你的应用安装到没有相机相机特性达不到你所声明要求的设备上.

      如果你的应用要使用相机或相机的一些特性,但又不是必须的,你应该在manifest中指定这些需求,但把android:required属性置为false

    <uses-featureandroid:name="android.hardware.camera"android:required="false" />

  • StoragePermission - 如果你的应用要存储图像或视频到外部存储上(SD),你必须也声明此权限.

    <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

  • AudioRecording Permission - 在使用视频捕获设备来录制音频时,你的应用必须请求音频捕获权限.

    <uses-permissionandroid:name="android.permission.RECORD_AUDIO" />

使用现有的相机应用

  一个不用写代码来获取图片和视频的快速方法是使用intent来调用现有的Androidcamera 应用.一个cameraintent调用现存的相机应用抓取图片或视频剪辑然后返回的你的应用.本节向你演示如何使用此技术获取图片和视频.

  调用一个相机intent,主要有以下步骤:

  • 组建一个相机Intent– 创建一个请求图片或视频的Intent,使用以下intent类型中的一个:

    • MediaStore.ACTION_IMAGE_CAPTURE- 从已存在的相机应用中请求一个图片.

    • MediaStore.ACTION_VIDEO_CAPTURE- 从已存在的相机应用中请求一个视频.

  • 启动这个相机Intent-使用startActivityForResult()方法来执行相机intent.在你启动intent后,相机应用的界面会出现在设备屏幕上,然后用户就可以用它来获取图片或视频.

  • 接收Intent结果-在你的应用中设置一个onActivityResult()方法来接收从相机intent来的回调和数据.当用户获取了一个图或视频之后(或取消了操作),系统就会调用此方法.


图像获取intent

  使用相机intent获取图像是使用最少代码获取图像的捷迳.一个图像获取intent包含以下额外信息:

  • MediaStore.EXTRA_OUTPUT-此设置需要一个Uri对象,这个对象指定了一个保存图像的路径和文件名.此设置是可选的,但是强烈建议使用之.如果你没有指定此值,相机应用就会把图像以默认的名字保存到默认的位置.

  下面的例子演示了形成一个图像获取intent并执行的方法.此例子中的getOutputMediaFileUri()方法是引用的”保存媒体文件”一节中的例子代码.

private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
private Uri fileUri;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // 创建一个获取图像的Intent
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // 创建一个文件来保存图像
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // 设置图像文件名

    // 开始图像获取Intent
    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}

  当startActivityForResult()方法被执行,看到一个相机应用的界面.当用户获取了一个图像(或取消了操作),用户界面返回到你的应用,你必须拦截onActivityResult()方法来接收intent的结果然后再继续执行你的应用.

视频获取intent

  使用相机intent获取视频是使用最少代码使得你的应用获取视频的捷径.一个视频获取intent可以包含以下额外信息:

  • MediaStore.EXTRA_OUTPUT-此设置需要一个保存视频的路径和文件名的Uri.此设置是可选的但是强列推荐的.如果你不指定此值,相机应用就把请求到的图像以默认的文件名保存到默认的文件夹下,这些信息保存在返回的intentIntent.getData()字段中.

  • MediaStore.EXTRA_VIDEO_QUALITY- 此值在最低质量最小文件尺寸时是0,在最高质量最大文件尺寸时是1.

  • MediaStore.EXTRA_DURATION_LIMIT- 此值设置获取视频的长度,以秒为单位.

  • MediaStore.EXTRA_SIZE_LIMIT- 此值设置获取视频文件的大小,以字节为单位.

  下面的例子演示了如何构建一个视频获取intent并执行它.此例子中的getOutputMediaFileUri()方法是引用的”保存媒体文件”一节中的例子代码.

private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200;
private Uri fileUri;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //create new Intent
    Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO);  // create a file to save the video
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);  // set the image file name

    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // set the video image quality to high

    // start the Video Capture Intent
    startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);
}

  当startActivityForResult()方法执行后,用户看到了一个改良的相机应用界面.在用户完成视频获取(或取消了操作)之后,用户界面返回到你的应用,你必须拦截onActivityResult()方法来接收intent的结果并且继续执行你的应用.




分享到:
评论

相关推荐

    android多媒体和相机详解十.doc

    android多媒体和相机详解十.doc

    android多媒体和相机详解十.doc编程资料

    android多媒体和相机详解十.doc

    android多媒体和相机详解十.pdf

    在Android平台上,开发涉及多媒体和相机功能的应用时,理解如何有效地使用相机API是至关重要的。本文将深入探讨Android相机API的使用,特别是关于检测和利用相机特性,包括自动对焦、测光区域以及预览尺寸调整等关键...

    多媒体应用开发实战详解 (带目录)

    《Android多媒体应用开发实战详解:图像、音频、视频、2D和3D》Android凭借其强大的功能逐渐赢得了广大用户和开发者的青睐,已经成为移动开发平台上的翘楚。全书分为17章,分别详细讲解了Android系统基础,深入底层...

    android多媒体和相机详解(二)

    ### Android多媒体和相机详解(二):音频焦点管理 #### 概述 在Android系统中,音频焦点(Audio Focus)管理对于确保良好的用户体验至关重要。由于Android是一个多任务环境,可能存在多个应用程序试图同时使用设备...

    Android 多媒体文件选择器

    **Android 多媒体文件选择器详解** 在移动应用开发中,提供用户选择多媒体文件(如图片和视频)的功能是常见的需求。"Android 多媒体文件选择器" 是一个专为此目的设计的开源解决方案,由 getchute.com 开发,并且...

    Android开发应用实战详解源代码

    第7章 娱乐和多媒体应用 7.1 获取图片的宽和高 7.1.1 实现原理 7.1.2 位图操作的基本知识 7.1.3 具体实现 7.2 绘制几何图形 7.3 手机屏保 7.4 照片拖动效果 7.5 存储卡中的图片 7.6 获取内置媒体文件 7.7 调节音量 ...

    Android底层开发技术实战详解-内核、移植和驱动(第2版,Kindle电子书)

    何为hal层深入分析,goldfish、msm、map内核和驱动解析,显示系统、输入系统、振动器系统、音频系统、视频输出系统的驱动,openmax多媒体、多媒体插件框架,传感器、照相机、wi-fi、蓝牙、gps和电话系统等。...

    Android应用开发详解

    《Android应用开发详解》 作者:郭宏志 编著 内容简介 本书分为三个部分,包括基础篇、技术篇和应用篇。由浅入深地讲述了Android应用开发的方方面面。 第一篇 基础篇 第1章 Android概述 Android概述,讲述了...

    Android驱动开发与移植实战详解

    李骏、陈小玉编著的《Android驱动开发与移植实战详解》分为18章,依次讲解了Android系统的基本知识, Linux内核的基本知识,分析了Android系统的源码,深入分析HAL层的基本知识,GoldFish下的驱动、MSM内核和驱动、...

    【eoeAndroid特刊】第15期:Android多媒体.zip

    【Android多媒体技术详解】 在Android开发中,多媒体处理是一个重要的组成部分,它涵盖了音频、视频、图像等多方面的内容。在【eoeAndroid特刊】第15期中,深入探讨了Android平台上的多媒体处理技术,这对于我们...

    Android移动开发案例详解

    12. **多媒体开发**:涵盖图像处理,音频和视频的播放、录制,以及相机API的使用。 13. **地图与位置服务**:讲解如何集成Google Maps API,获取和使用GPS定位,以及路线规划。 14. **通知与推送**:讨论...

    android 系统详解ppt

    Media框架提供了API来处理多媒体文件,如MediaPlayer用于播放音频和视频,Camera API用于相机功能,以及Bitmap和ExifInterface用于图片处理和元数据读取。 "多线程"在Android开发中至关重要,因为它允许应用同时...

    Android底层开发技术实战详解(第2共2部分)

    全书分为21章,依次讲解驱动移植的必要性, Goldfish、OMAP内核和驱动解析,显示系统、输入系统、振动器系统、音频系统、视频输出系统的驱动,OpenMax多媒体和多媒体插件框架,传感器,照相机,Wi-Fi,蓝牙和GPS,...

    Android入门到精通详解(完整书签)

    8. **多媒体处理**:如何集成音频、视频播放,以及相机功能,包括图像处理和捕获照片。 9. **权限管理**:Android 6.0及以上版本的动态权限申请机制,以及在Manifest中静态声明权限的方式。 10. **异步处理**:...

    深入浅出android多媒体

    ### 深入浅出Android多媒体——OpenCore框架详解 #### 一、OpenCore框架概览 ##### 1.1 OpenCore定义与地位 - **名称解析**:OpenCore,通常也被称作PacketVideo(PV),是Android多媒体的核心组件。PacketVideo...

    Android应用开发详解d88 android入门

    以上只是"Android应用开发详解d88 android入门"的部分知识点,实际学习中,你将深入到每个细节,包括但不限于动画、通知、文件I/O、多媒体支持、蓝牙连接、地图集成等。通过这个入门教程,你可以逐步掌握Android开发...

Global site tag (gtag.js) - Google Analytics