实例介绍
【实例截图】
【核心代码】
package example.test1;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.content.ContentResolver;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.Display;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
/*
public class CBCamera {
static CBCamera m_instance;
static final String TAG = "CameraDemo";
Camera m_camera;
WindowManager m_windowManager;
ContentResolver m_contentResolver;
public static CBCamera instance()
{
if(m_instance == null)
{
m_instance = new CBCamera();
}
return m_instance;
}
private CBCamera()
{
open();
}
public void setWindowManager(WindowManager windowManager)
{
m_windowManager = windowManager;
}
public void setContentResolver(ContentResolver contentResolver)
{
m_contentResolver = contentResolver;
}
public void initialPreview(SurfaceHolder holder)
{
try
{
if(m_camera != null)
{
m_camera.setPreviewDisplay(holder);
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
public void startPreview(int width, int height)
{
if(m_camera != null)
{
Camera.Parameters parameters = m_camera.getParameters();
Display display = m_windowManager.getDefaultDisplay();
if(display.getRotation() == Surface.ROTATION_0)
{
parameters.setPreviewSize(height, width);
m_camera.setDisplayOrientation(90);
}
if(display.getRotation() == Surface.ROTATION_90)
{
parameters.setPreviewSize(width, height);
}
if(display.getRotation() == Surface.ROTATION_180)
{
parameters.setPreviewSize(height, width);
}
if(display.getRotation() == Surface.ROTATION_270)
{
parameters.setPreviewSize(width, height);
m_camera.setDisplayOrientation(180);
}
//parameters.setPreviewSize(width, height);
m_camera.setParameters(parameters);
m_camera.startPreview();
}
}
public void stopPreview()
{
if(m_camera != null)
{
m_camera.stopPreview();
}
}
public void takePicture()
{
if(m_camera != null)
m_camera.takePicture(shutterCallback, rawCallback, jpegCallback);
}
public void open()
{
if(m_camera == null)
m_camera = Camera.open();
}
public void release()
{
if(m_camera != null)
{
m_camera.release();
m_camera = null;
}
}
ShutterCallback shutterCallback = new ShutterCallback() {
public void onShutter() {
Log.d(TAG, "onShutter'd");
}
};
// Handles data for raw picture
PictureCallback rawCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Log.d(TAG, "onPictureTaken - raw");
}
};
// Handles data for jpeg picture
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
try
{
Bitmap bitmapPicture = BitmapFactory.decodeByteArray(data, 0, data.length);
String path = Environment.getExternalStorageDirectory().toString();
String filename;
Date date = new Date(0);
SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMMddHHmmss");
filename = sdf.format(date);
OutputStream fOut = null;
//File file = new File(path, "/DCIM/" filename ".jpg");
File file = new File(path, "/" filename ".jpg");
fOut = new FileOutputStream(file);
//FileOutputStream out = new FileOutputStream(String.format("/sdcard/DCIM/Signatures/%d.jpg", System.currentTimeMillis()));
bitmapPicture.compress(Bitmap.CompressFormat.JPEG, 0, fOut);
fOut.flush();
fOut.close();
MediaStore.Images.Media.insertImage(m_contentResolver,file.getAbsolutePath(),file.getName(),file.getName());
}
catch(Exception ex)
{
ex.printStackTrace();
}
finally
{
camera.startPreview();
}
Log.d(TAG, "onPictureTaken - jpeg");
}
};
}
*/
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.*;
import android.app.*;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.*;
import android.widget.*;
public class MainActivity extends Activity implements OnClickListener {
private static final int RESULT_CAPTURE_IMAGE = 1;// 照相的requestCode
private static final int REQUEST_CODE_TAKE_VIDEO = 2;// 摄像的照相的requestCode
private static final int RESULT_CAPTURE_RECORDER_SOUND = 3;// 录音的requestCode
private String strImgPath = "";// 照片文件绝对路径
private String strVideoPath = "";// 视频文件的绝对路径
private String strRecorderPath = "";// 录音文件的绝对路径
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_main);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case RESULT_CAPTURE_IMAGE://拍照
if (resultCode == RESULT_OK) {
Toast.makeText(this, strImgPath, Toast.LENGTH_SHORT).show();
}
break;
case REQUEST_CODE_TAKE_VIDEO://拍摄视频
if (resultCode == RESULT_OK) {
Uri uriVideo = data.getData();
Cursor cursor=this.getContentResolver().query(uriVideo, null, null, null, null);
if (cursor.moveToNext()) {
/** _data:文件的绝对路径 ,_display_name:文件名 */
strVideoPath = cursor.getString(cursor.getColumnIndex("_data"));
Toast.makeText(this, strVideoPath, Toast.LENGTH_SHORT).show();
}
}
break;
case RESULT_CAPTURE_RECORDER_SOUND://录音
if (resultCode == RESULT_OK) {
Uri uriRecorder = data.getData();
Cursor cursor=this.getContentResolver().query(uriRecorder, null, null, null, null);
if (cursor.moveToNext()) {
/** _data:文件的绝对路径 ,_display_name:文件名 */
strRecorderPath = cursor.getString(cursor.getColumnIndex("_data"));
Toast.makeText(this, strRecorderPath, Toast.LENGTH_SHORT).show();
}
}
break;
}
}
/**
* 照相功能
*/
private void cameraMethod() {
Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
strImgPath = Environment.getExternalStorageDirectory().toString() "/CONSDCGMPIC/";//存放照片的文件夹
String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) ".jpg";//照片命名
File out = new File(strImgPath);
if (!out.exists()) {
out.mkdirs();
}
out = new File(strImgPath, fileName);
strImgPath = strImgPath fileName;//该照片的绝对路径
Uri uri = Uri.fromFile(out);
imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
imageCaptureIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
startActivityForResult(imageCaptureIntent, RESULT_CAPTURE_IMAGE);
}
/**
* 拍摄视频
*/
private void videoMethod() {
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
startActivityForResult(intent, REQUEST_CODE_TAKE_VIDEO);
}
/**
* 录音功能
*/
private void soundRecorderMethod() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("audio/amr");
startActivityForResult(intent, RESULT_CAPTURE_RECORDER_SOUND);
}
/**
* 提示信息
* @param text
* @param duration
*/
private void showToast(String text, int duration) {
// Toast.makeText(ProblemReport.this, text, duration).show();
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
}
}
标签: 拍照代码
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论