android 多媒体和相机详解六

标签: android 多媒体 相机 | 发表时间:2012-06-25 06:57 | 作者:nkmnkm
出处:http://blog.csdn.net

接收相机intent的结果

  一旦你构建并执行了一个图像或视频相机intent,你的应用必须配置为能接收intent的结果.本节向你展示如何拦截从相机intent来的回调以使你的应用可以对获取到的图像和视频做更多的动作.


  为了接收一个intent的结果,你必须覆写启动intent的activity的onActivityResult()方法.下面的代码演示了如何覆写onActivityResult()来取得相机intent的结果.

private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            // Image captured and saved to fileUri specified in the Intent
            Toast.makeText(this, "Image saved to:\n" +
                     data.getData(), Toast.LENGTH_LONG).show();
        } else if (resultCode == RESULT_CANCELED) {
            // User cancelled the image capture
        } else {
            // Image capture failed, advise user
        }
    }

    if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            // Video captured and saved to fileUri specified in the Intent
            Toast.makeText(this, "Video saved to:\n" +
                     data.getData(), Toast.LENGTH_LONG).show();
        } else if (resultCode == RESULT_CANCELED) {
            // User cancelled the video capture
        } else {
            // Video capture failed, advise user
        }
    }
}

一旦你的activity接收到一个成功的结果,获取到的图像或视频就在某个路径下等着你去处理它们了.


绑定到一个相机应用

一些开发者可能需要一个相机用户接口用来定制他们的应用的外观或提供特一些特殊的特性。创建一个定制的相机activity需要比使用intent更多的代码,但是它可以提供一个更吸引人的用户体验。



为你的应用创建一个定制的相机界面的一般步骤是:

  • 探测并使用相机-创建代码来检测相机是否存在并请求使用它.

  • 创建一个预览类-创建一个相机预览类,它从SurfaceView派生并实现SurfaceHolder接口。此类可以预览从相机来的实时影像。

  • 构建一个预览 Layout- 当你有了相机预览类后,再创建一个viewlayout包含预览类和用于控制的用户界面。

  • 建立图像获取的监听器– 为你的控制界面建立响应用户动作的监听器。

  • 获取并存入文件中– 建立获取视频或图像然后存储的代码。

  • 释放相机-用完相机后,你的应用必须正确的释放它以供别的应用使用。



相机硬件是一个共享资源,必须小心管理,才能使你的应用不与别的也使用相机的应用产生冲突。后面的章节讨论如何检测相机,如何请求使用一个相机,如何获取图像或视频以及如何释放相机。



警告:记住在用完成时要调用Camera.release()来释放相机对象!如果你的应用没有正确地释放相机,所有的后续对相机的使用,包括你自己的应用所发出的,将会失败并导致你自己的应用或其它应用关闭。


检测相机硬件

如果你的应用不使用manifest声明请求相机,你就应该在运行时检测相机是否可用。要执行这种检测,需使用PackageManager.hasSystemFeature()方法,如下所示:

/** 检查设备是否具有相机*/
Devate boolean checkCameraHardware(Context context) {
    if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
        // this device has a camera
        return true;
    } else {
        // no camera on this device
        return false;
    }
}

Android设备可能具有多个相机,比如一个正面有一个视频聊天相机,后面有一个拍照相机。Android2.3(API Level 9) 及后续版本允许你检查相机的数量,使用Camera.getNumberOfCameras()方法。


使用相机

如果你确定你应用所在的设备上有一个相机,你必须获得相机的一个实例后才能请求使用它(除非你正在使用intent来使用相机)。


要使用主相机,使用Camera.open()方法并注意去捕获任何异常,就像下面代码所示:

/** 一个获取相机对象实例的安全方法 */
public static Camera getCameraInstance(){
    Camera c = null;
    try {
        c = Camera.open(); // attempt to get a Camera instance
    }
    catch (Exception e){
        // Camera is not available (in use or does not exist)
    }
    return c; // returns null if camera is unavailable
}

警告:在使用Camera.open()时总是要检查异常。否则如果相机正被使用或不存在将导致你的应用被系统关闭。

在运行Android2.3 (API Level 9)或更高版本的设备上,你可以使用Camera.open(int)访问特定的相机。上面的例子代码将访问第一个相机,也就是反面的相机。

检查相机的特性

一旦你获取到一个相机,你就可以使用Camera.getParameters()方法获取有关相机能力的信息,主要是检查所返回的Camera.Parameters对象以确定相机的能力。当使用APILevel 9或更高版本,使用Camera.getCameraInfo()来确定相机是位于正面还是反面,以及它的图像是横的还是竖的。



作者:nkmnkm 发表于2012-6-25 6:57:11 原文链接
阅读:0 评论:0 查看评论

相关 [android 多媒体 相机] 推荐:

android 多媒体和相机详解五

- - CSDN博客推荐文章
  Android框架架包含了各种相机和相机功能的支持,使你可以在你的应用中捕获图像和视频.本文档讨论一个简单快速的获取图像和视频的方法,并概述一个创建自定义用户相机体验的高级方法..   在使你的应用能使用设备上的相机之前,你应该先想一想你的应用将来会如何使用此硬件.. 必须-相机是必须的,你不希望你的应用安装到一个没有相机的设备上.你应该在manifest文件中声明需要相机..

android 多媒体和相机详解六

- - CSDN博客推荐文章
接收相机intent的结果.   一旦你构建并执行了一个图像或视频相机intent,你的应用必须配置为能接收intent的结果.本节向你展示如何拦截从相机intent来的回调以使你的应用可以对获取到的图像和视频做更多的动作..   为了接收一个intent的结果,你必须覆写启动intent的activity的onActivityResult()方法.下面的代码演示了如何覆写onActivityResult()来取得相机intent的结果..

Android 照相机打开方法

- - CSDN博客推荐文章
作者:gongzibai 发表于2012-6-8 17:24:11 原文链接. 阅读:0 评论:0 查看评论.

利用 Android 的 OTG 功能控制单反相机

- Alex - 爱范儿 · Beats of Bits
iOS 平台已经有很多应用程序可以远程控制数码单反相机,但是在 Android 平台上能更方便:只需要一条 USB 线,就能直接用手机屏幕代替相机的取景器进行操作. 在 XDA 论坛上的一名开发者 Chainfire 公布了一段视频,它利用三星 Galaxy S II 的 USB OTG(On-The-Go)功能,让佳能数码单反相机的实时取景框图像以每秒 15 帧的速率显示在手机屏幕上.

App ReLoad:用Android 来控制单反相机

- stille - 煎蛋
用Android 手机来控制你的Canon EOS,同时又实现性了远距离遥控拍照功能,嗯,这就是Geek 教你在七夕节偷偷的拍妹纸的方法. 这个东东名叫DSLR Controller,包括一个由Chainfire公司发布的Android APK 和一根USB 转换头将Canon EOS 与Android 连接.

Ice Cream Sandwich 为 Android 相机和相片集带来更新

- Chinaxingwei - Engadget 中国版
我们等待许久的 Android 相机和相片集更新终于跟着 Ice Cream Sandwich 一起来了. Ice Cream Sandwich 的相机界面完全翻新,从锁定屏幕就可以直接进入相机功能. 拜「zero shutter lag」 零秒差功能、连续自动对焦、自动脸部对焦所赐,拍照方便很多.

多媒体格式转换工具:WinFF

- - 〖好记性不如烂笔头─Ubuntu Note〗
 WinFF是FFmpeg的图形化界面. 能转换大多数常见的多媒体文件格式,并且可以同时给多个文件进行不同类型的转换. 比如:转换同时把一堆MP4、FLV和MOV文件转换成AVI、MP3或者3gp等等. 在Ubuntu软件中心里面直接能找到WinFF:.

掌握HTML5中的多媒体--音频(audio)

- - CSDN博客推荐文章
音频标签的使用和视频是非常相似的:指定多个音频文件,浏览器会播放其中支持的第一个. 2.       你的浏览器不支持

QWinFF:简易的多媒体格式转换工具

- - Ubuntusoft
QWinFF 是一个简单易用的多媒体格式转换工具,是 FFmpeg 的图形化界面. 使用Qt4/C++ 语言,能够运行在Linux和Windows 下. 目前支持Ubuntu 10.04-12.04 :. WinFF:多媒体格式转换器. 命令行音频格式转换器:SoX. media-io:在线音乐格式转换.

Cowon 推出 iAudio 10 多媒体播放器,称有心理治疗的功能!

- 咸柠七 - Engadget 中国版
宣传了一阵子,Cowon 终于推出了 iAudio 10. 这个轻薄的多媒体播放器拥有 240 x 400 分辨率的 3 寸屏幕、内置麦克风、电视输出、FM 收音机、多种档案支持和文件查看器,容量从 4GB 到 32GB 都有. 这些规格都还不错,不过最吸睛的是它的「颜色治疗接口」(Color Therapy UI).