zoukankan      html  css  js  c++  java
  • 11.1 使用意图录制视频

        正如之前所讨论的那样,通常执行Android上某些功能的最快捷和简单的方式是利用现有的应用程序,可以通过应用程序中的一个意图来触发它。通过意图触发内置的Camera应用程序来录制视频也不例外。

        在android.provider.MediaStore类中,存在一个名为ACTION_VIDEO_CAPTURE的常量,其中包含字符串“android.media.action.VIDEO_CAPTURE”。摄像头应用程序将这个字符串注册为一个意图刷选器,因此在意图中通过Content.startActivity或Content.startActivityForResult方法发送该字符串时将会激活它。其他应用程序也可能注册了相同的字符串,这将会使用户获得提示,以选择他或她想使用哪个应用程序来执行该项操作。

    1             Intent captureVideoIntent=new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE);
    2             startActivityForResult(captureVideoIntent, VIDEO_CAPTURE);

        VIDEO_CAPTURE是一个常量,应该将它定义为一个类变量。当Camera应用程序通过调用onActivityResult方法将一个结果返回给活动时,可以使用该常量确认:

    1     public static int VIDEO_CAPTURE=1;

        onActivityResult方法返回给活动的意图(下面代码中的data)中包含了一个视频文件的URI,该文件是由Camera应用程序创建的。

    1     @Override
    2     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    3         super.onActivityResult(requestCode, resultCode, data);
    4         if(resultCode==RESULT_OK&&requestCode==VIDEO_CAPTURE){
    5             videoFileUri=data.getData();
    6             playVideoButton.setEnabled(true);
    7         }
    8     }

        下面是使用意图触发内置的Camera应用程序以进行视频捕获的一个完整示例。

     1 package com.nthm.androidtestActivity;
     2 
     3 import com.nthm.androidtest.R;
     4 import android.app.Activity;
     5 import android.content.Intent;
     6 import android.net.Uri;
     7 import android.os.Bundle;
     8 import android.view.View;
     9 import android.view.View.OnClickListener;
    10 import android.widget.Button;
    11 import android.widget.VideoView;
    12 
    13 public class VideoCaptureIntent extends Activity implements OnClickListener {

        创建活动的VIDEO_CAPTURE常量,其将在调用onActivityResult时返回。

    1     public static int VIDEO_CAPTURE=1;

        活动将使用两个按钮,一个用于触发意图的发送,即captureVideoButton,另一个用于捕获视频后播放他,即playVideoButton。

    1     private Button captureVideoButton;
    2     private Button playVideoButton;

        我们将使用一个标准的带Uri的VideoView对象来播放已经捕获的视频。

     1     private VideoView videoView;
     2     private Uri videoFileUri;
     3     @Override
     4     protected void onCreate(Bundle savedInstanceState) {
     5         super.onCreate(savedInstanceState);
     6         setContentView(R.layout.videocaptureitent);
     7         captureVideoButton=(Button) findViewById(R.id.CaptureVideoButton);
     8         playVideoButton=(Button) findViewById(R.id.PlayVideoButton);
     9         playVideoButton.setOnClickListener(this);
    10         captureVideoButton.setOnClickListener(this);

         初始时不会启用playVideoButton,即不能单击它。一旦捕获了视频,则将它设置为启用。

    1         playVideoButton.setEnabled(false);
    2         videoView=(VideoView) findViewById(R.id.VideoView);
    3     }

        活动实现了OnClickListener,同时注册为每个按钮的OnClickListener。因此当按下或单击一个按钮时,将调用onClick方法。

    1     @Override
    2     public void onClick(View v) {
    3         if(v==captureVideoButton){

        如果按下captureVideoButton,那么创建意图并连同VIDEO_CAPTURE常量一起将它传递给startActivityForResult方法,这将启动内置的Camera应用程序。

    1             Intent captureVideoIntent=new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE);
    2             startActivityForResult(captureVideoIntent, VIDEO_CAPTURE);
    3         }else if(v==playVideoButton){

        如果单击playVideoButton,那么设置待播放的URI并开始播放。

    1             videoView.setVideoURI(videoFileUri);
    2             videoView.start();
    3         }
    4     }

        当Camera应用程序(或任何触发的应用程序/活动)返回时,将调用如下的onActivityResult方法。它将检查resultCode是否为长两个RESULT_OK,以及requestCode是否为入到startActivityForResult的值VIDEO_CAPTURE,然后获取录制的视频文件的Uri。随后将启用playVideoButton,从而用户可以单击它并开始播放视频。

    1     @Override
    2     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    3         super.onActivityResult(requestCode, resultCode, data);
    4         if(resultCode==RESULT_OK&&requestCode==VIDEO_CAPTURE){
    5             videoFileUri=data.getData();
    6             playVideoButton.setEnabled(true);
    7         }
    8     }
    9 }

        下面是上述活动引用的布局XML。

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     android:layout_width="match_parent"
     3     android:layout_height="match_parent"
     4     android:orientation="vertical"
     5     >
     6  <Button 
     7      android:layout_width="wrap_content"
     8      android:layout_height="wrap_content"
     9      android:id="@+id/CaptureVideoButton"
    10      android:text="Capture Video"/>
    11  <Button 
    12      android:layout_width="wrap_content"
    13      android:layout_height="wrap_content"
    14      android:id="@+id/PlayVideoButton"
    15      android:text="Play Video"/>
    16  <VideoView 
    17      android:id="@+id/VideoView"
    18      android:layout_width="wrap_content"
    19      android:layout_height="wrap_content"/>
    20 </LinearLayout>

        如果只须录制视频或希望给用户提供所有在Camera应用程序中可用的控制,那么使用意图来触发它将非常有效。

  • 相关阅读:
    Asp.net弹出浏览器客户端确认对话框代码 Carlwave
    VS 2005 与SQL Server 2005整合优势在哪里?(from csdn.net) Carlwave
    如何让搜索引擎收录我的站点 Carlwave
    超强扩展性的DNNDotNetNuke模块功能分类列表(from 中国DNN) Carlwave
    DotNetNuke命名空间概述 Carlwave
    Most Popular Questions and Answers on ASP.NET Whidbey(from asp.net forums,write by ASP.NET Team) Carlwave
    火箭官方宣告麦蒂缺阵五周 季后赛前景蒙上阴影 Carlwave
    asp.net有效使用缓存(转) Carlwave
    《Business Rules Engine Overview》《业务规则引擎概述》write by Mark Kamoski Carlwave
    中国详细省市县自治区名称列表(含access数据库和sql2000备份数据库) Carlwave
  • 原文地址:https://www.cnblogs.com/ZSS-Android/p/3958188.html
Copyright © 2011-2022 走看看