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

android 多媒体和相机详解九

 
阅读更多
释放相机

  想机是被设备上的应用们共享的资源.你的应用可以在获取相机实例后使用它,并且你的应用必须在用完后释放它,而且在暂停时(Activity.onPause())也要釋放它.如果你的应用没有适当的释放相机,所有后续试图获取相机使用权的操作,包括你自己的应用,都会失败并且导致那些应用关闭.

要释放一个相机对象实例,使用方法Camera.release(),如下代码所示:

public class CameraActivity extends Activity {
    private Camera mCamera;
    private SurfaceView mPreview;
    private MediaRecorder mMediaRecorder;

    ...

    @Override
    protected void onPause() {
        super.onPause();
        releaseMediaRecorder();       // if you are using MediaRecorder, release it first
        releaseCamera();              // release the camera immediately on pause event
    }

    private void releaseMediaRecorder(){
        if (mMediaRecorder != null) {
            mMediaRecorder.reset();   // clear recorder configuration
            mMediaRecorder.release(); // release the recorder object
            mMediaRecorder = null;
            mCamera.lock();           // lock camera for later use
        }
    }

    private void releaseCamera(){
        if (mCamera != null){
            mCamera.release();        // release the camera for other applications
            mCamera = null;
        }
    }
}

保存媒体文件

  用户创建的媒体文件,比如图片或视频,应该被保存到设备的外部存储中(SDCard),这样可以保留系统空间并且使得用户可以不通过设备也能获取这些文件.一个设备上有很多可以存放媒体文件的路径位置,然而只有两个标准的路径对于开发者来说是必须考虑的:

·Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)-此方法返回标准的,共享的,并且是推荐的存储位置.此路径是被共享的(公开的),所以其它应用可以轻松发现然后读取,修改以及删除此路径下的文件们.如果你的应用被用户卸载,保存在此路径下的文件将被删除.要避免与干涉已存在的图片或视频文件,你应该在路径下为你的应用创建一个子文件夹,如后面例子中所示.此方法从Android2.2(APILevel8)中开始可以使用,对于等价的早期API的调用,见"保存共享文件"一节.

·Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)-此方法返回一个标准的存储图像和视频位置,并且此位置与你的应用会关联起来.如果你的应用被删除,所有此位置下的文件们都将被删除.此位置下的文件不会强制应用安全特性,所以其它应用可以读取,修改以及删除它们.

  下面的代码示例演示了如何为一个媒体文件创建一个文件或Uri位置.这个文件可以在通过intent调用一个设备的相机或在创建一个相机应用时使用:


public static final int MEDIA_TYPE_IMAGE = 1;
public static final int MEDIA_TYPE_VIDEO = 2;

/** 创建一个文件Uri来存储一个图像或视频 */
private static Uri getOutputMediaFileUri(int type){
      return Uri.fromFile(getOutputMediaFile(type));
}

/** 创建一个文件用于存储图像或视频 */
private static File getOutputMediaFile(int type){
    // 为了安全,你应该检查SDCard是否被mounted,
    // 所以应先调用Environment.getExternalStorageState().

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
              Environment.DIRECTORY_PICTURES), "MyCameraApp");
    //如果你想创建图像并在应用之间共享,还想让你的图像在你的应用卸载后依然存在,
    // 这个位置是最好的选择.

    // 如果存储位置不存在,创建它.
    if (! mediaStorageDir.exists()){
        if (! mediaStorageDir.mkdirs()){
            Log.d("MyCameraApp", "failed to create directory");
            return null;
        }
    }

    // 创建媒体文件的名字
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File mediaFile;
    if (type == MEDIA_TYPE_IMAGE){
        mediaFile = new File(mediaStorageDir.getPath() + File.separator +
        "IMG_"+ timeStamp + ".jpg");
    } else if(type == MEDIA_TYPE_VIDEO) {
        mediaFile = new File(mediaStorageDir.getPath() + File.separator +
        "VID_"+ timeStamp + ".mp4");
    } else {
        return null;
    }

    return mediaFile;
}

  注:Environment.getExternalStoragePublicDirectory()只能用于Android2.2(APILevel8)或更高版本中.如果你的目标设备使用早期版本,应用用Environment.getExternalStorageDirectory()代替.


相机特性Features

  Android支持大量的相机特性,你可以在你的应用中调节它们.比如图像格式,闪光模式,焦点设置,以及更多.本节列出常用的相机特性,并且简要说明如何使用它们.大多数相机特性可以使用Camera.Parameters对象取得或设置.然而,有一些重要的特性需要比Camera.Parameters更复杂的方式进行设置,这些特性在以下各节中说明:

·测光与聚焦区域

·面部检测

·定时拍摄视频

  对于如何使用那些通过Camera.Parameters控制的一般特性,请见后面的"使用相机特性"一节.


1.各版API中引入的常用相机特性表

Feature

APILevel

Description

FaceDetection

14

检测人脸位置并用结果来计算焦点,测光和白平衡

MeteringAreas

14

在一个图像内指定一个或多个区域来计算白平衡

FocusAreas

14

在一个图像中设置一个或多个聚焦区域

WhiteBalanceLock

14

停止或开始自动白平衡调整

ExposureLock

14

停止或开始自动曝光调整

VideoSnapshot

14

在拍视频时抓取一个图像

TimeLapseVideo

11

定时录像

MultipleCameras

9

在一个设备上支持一个或多个相机,包括正面和反面的相机。

FocusDistance

9

焦距

Zoom

8

设置图像的放大率

ExposureCompensation

8

减小或增大曝光级别

GPSData

5

图像中包含或不包含地理位置信息

WhiteBalance

5

设置白平衡的模式

FocusMode

5

设置在一个物体上如何聚焦,比如自动,固定,微距,无限远.

SceneMode

5

场景模式,比如晚上,海滩,雪地或烛光.

JPEGQuality

5

设置JPEG图像的压缩级别.

FlashMode

5

设置闪光灯开,关或自动.

ColorEffects

5

应用一个颜色效果到图像,比如黑白,褐色,反色.

Anti-Banding

5

减少在JPEG压缩时的颜色渐变的边缘效应.

PictureFormat

1

指定图像的文件格式

PictureSize

1

指定图像的宽和高

:这些特性并不是在所有的设备上都被支持,因为硬件的差别和软件的实现各有不同.



分享到:
评论

相关推荐

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

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

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

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

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

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

    Android多媒体应用开发范例.pdf

    《Android多媒体应用开发详解》 一、Android多媒体应用概述 Android多媒体应用开发是移动应用开发中的重要组成部分,涉及音频、视频、图像等多种媒体格式的处理与展现。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内核和驱动、...

    Android移动开发案例详解

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

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

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

    android 系统详解ppt

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

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

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

    深入浅出android多媒体

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

    Android应用开发详解d88 android入门

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

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

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

Global site tag (gtag.js) - Google Analytics