您的位置:首页 > 移动开发 > Android开发

Android 调用系统的拍照与摄像程序

2017-04-12 20:22 387 查看

项目简介:

该项目为调用系统的照相机和摄像机

详细介绍:

用户点击 “拍照”按钮后,调用系统的照相机,并保存拍照的照片

用户点击“摄像”按钮后,调用系统的摄像机,并保存摄像的照片

并且,拍照后的照片可以在图库中查看到,视频可以再播放器中查看到

该应用涉及到的知识有:

1.如何调用系统照相功能

实际上就是隐式启动一个活动

2.如何调用系统摄像功能

与1相似

3.onActivityResult的使用

注意:

1.尽管照相、摄像都需要系统的权限,如写入SD卡权限等,但是这个项目是调用系统的照相、摄像功能,该项目中并没有涉及到SD卡的写入,完成SD卡写入动作的是系统的照相、摄像功能,所以这里不需要添加权限

2.照片完成后,要发送SD卡就绪广播,让系统遍历SD卡,否则排除的照片无法在手机中显示。

早期时是扫描整个SD卡,现在横扫使用了,这样很耗时,现在一般都是指定更新一个文件。

步骤:

1.创建一个Android项目,首先是布局文件

布局文件就连个按钮:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="hhh.exercise.smultimedia_e_camera.MainActivity" >

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="image"
android:text="拍照"
android:textColor="#00ff00"
android:textSize="30sp" />

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="video"
android:text="摄像"
android:textColor="#00ff00"
android:textSize="30sp" />

</LinearLayout>


2.编写Activity代码

import java.io.File;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {

private File imgFile;
private File videoFile;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

/**
* 调用系统的相机拍照
*/
public void image(View view) {

// 启动系统提供的拍照Activity
Intent it = new Intent();
it.setAction(MediaStore.ACTION_IMAGE_CAPTURE);

// 设置系统路劲
imgFile = new File(Environment.getExternalStorageDirectory().getPath(), "h1.jpg");
Uri uri = Uri.fromFile(imgFile);
it.putExtra(MediaStore.EXTRA_OUTPUT, uri);

// 使用该API,it所对应的Activity销毁时的时候会回调onActivityResult方法
startActivityForResult(it, 1);

}

/**
* 调用系统的相机摄像
*/
public void video(View view) {

Intent it = new Intent();
it.setAction(MediaStore.ACTION_VIDEO_CAPTURE);

videoFile = new File(Environment.getExternalStorageDirectory().getPath(), "h2.3gp");
Uri uri = Uri.fromFile(videoFile);
it.putExtra(MediaStore.EXTRA_OUTPUT, uri);

// 设置视频的质量,0表示低质量,1表示高质量
it.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);

startActivityForResult(it, 2);
}

// 当时用了startActivityForResult启动的Activity销毁时,回调该方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
Toast.makeText(getApplicationContext(), "拍照成功", 0).show();

// 通知媒体数据库,跟新制定的URL
Intent it = new Intent();
it.setAction(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
it.setData(Uri.fromFile(imgFile));
sendBroadcast(it);

} else if (requestCode == 2) {
Toast.makeText(getApplicationContext(), "摄像成功", 0).show();

// 通知媒体数据库,跟新制定的URL
Intent it = new Intent();
it.setAction(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
it.setData(Uri.fromFile(videoFile));
sendBroadcast(it);
}
}
}


3.完成

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息