Android开发之拍照功能实现
参考链接:http://www.linuxidc.com/Linux/2013-11/92892p3.htm
原文链接:http://blog.csdn.net/tangcheng_ok/article/details/7036871
增加使用相机和写入权限:
<uses-permission android:name="android.permission.CAMERA" /><uses-feature android:name="android.hardware.camera" /><uses-feature android:name="android.hardware.camera.autofocus" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
主程序代码:
package com.example.carejulygpsmap;import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date; import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button; import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;public class CareJulyActivity extends ActionBarActivity {private final static String TAG = "CameraActivity"; private SurfaceView surfaceView; private SurfaceHolder surfaceHolder; private Camera camera; private File picture; private Button btnSave; private static final int NONE = 0;private static final int PHOTO_GRAPH = 1;// 拍照private static final int PHOTO_ZOOM = 2; // 缩放private static final int PHOTO_RESOULT = 3;// 结果private static final String IMAGE_UNSPECIFIED = "image/*";private ImageView imageView = null;private Button btnPhone = null;private Button btnTakePicture = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_care_july); setupViews();
// imageView = (ImageView) findViewById(R.id.imageView);
// btnPhone = (Button) findViewById(R.id.btnPhone);
// btnPhone.setOnClickListener(onClickListener);
// btnTakePicture = (Button) findViewById(R.id.btnTakePicture);
// btnTakePicture.setOnClickListener(onClickListener);}// @Override//src
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_care_july);
// }@Override//srcpublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.care_july, menu);return true;}@Override//srcpublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}//CamCapprivate void setupViews(){ surfaceView = (SurfaceView) findViewById(R.id.camera_preview); // Camera interface to instantiate components surfaceHolder = surfaceView.getHolder(); // Camera interface to instantiate components surfaceHolder.addCallback(surfaceCallback); // Add a callback for the SurfaceHolder surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); btnSave = (Button) findViewById(R.id.save_pic); btnSave.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { takePic(); } }); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_CAMERA || keyCode == KeyEvent.KEYCODE_SEARCH) { takePic(); return true; } return super.onKeyDown(keyCode, event); } private void takePic() { camera.stopPreview();// stop the preview camera.takePicture(null, null, pictureCallback); // picture } // Photo call back Camera.PictureCallback pictureCallback = new Camera.PictureCallback() { //@Override public void onPictureTaken(byte[] data, Camera camera) { new SavePictureTask().execute(data); camera.startPreview(); } }; // save pic //保存图片,不过保存的图片较小,保存在根目录 的wishchin文件夹里面class SavePictureTask extends AsyncTask<byte[], String, String> { @Override protected String doInBackground(byte[]... params) { String fname = DateFormat.format("yyyyMMddhhmmss", new Date()).toString()+".jpg"; Log.i(TAG, "fname="+fname+";dir="+Environment.getExternalStorageDirectory()); //picture = new File(Environment.getExternalStorageDirectory(),fname);// create file picture = new File(Environment.getExternalStorageDirectory()+"/wishchin/"+fname); try { FileOutputStream fos = new FileOutputStream(picture.getPath()); // Get file output stream fos.write(params[0]); // Written to the file fos.close(); } catch (Exception e) { e.printStackTrace(); } return null; } } // SurfaceHodler Callback handle to open the camera, off camera and photo size changes SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() { public void surfaceCreated(SurfaceHolder holder) { Log.i(TAG, "surfaceCallback===="); camera = Camera.open(); // Turn on the camera try { camera.setPreviewDisplay(holder); // Set Preview } catch (IOException e) { camera.release();// release camera camera = null; } } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Log.i(TAG,"====surfaceChanged"); Camera.Parameters parameters = camera.getParameters(); // Camera parameters to obtain parameters.setPictureFormat(PixelFormat.JPEG);// Setting Picture Format
// parameters.set("rotation", 180); // Arbitrary rotation camera.setDisplayOrientation(0);
// parameters.setPreviewSize(400, 300); // Set Photo Size camera.setParameters(parameters); // Setting camera parameters camera.startPreview(); // Start Preview } public void surfaceDestroyed(SurfaceHolder holder) { Log.i(TAG,"====surfaceDestroyed"); camera.stopPreview();// stop preview camera.release(); // Release camera resources camera = null; } };
}
界面代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <android.view.SurfaceViewandroid:id="@+id/camera_preview"android:layout_width="462dp"android:layout_height="534dp"android:layout_alignParentTop="true"android:layout_centerInParent="true"android:layout_gravity="center_vertical|center_horizontal" /><Button android:id="@+id/save_pic" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="txt_save" /> </LinearLayout>
Android开发之拍照功能实现相关推荐
- Android添加拍照功能,Android开发实现拍照功能的方法实例解析
本文实例讲述了Android开发实现拍照功能的方法.分享给大家供大家参考,具体如下: 解析: 1)判断是否有摄像头checkCameraHardware(this) 2)获得相机camera = Ca ...
- android实现相机功能,Android开发实现拍照功能的方法实例解析
本文实例讲述了Android开发实现拍照功能的方法.分享给大家供大家参考,具体如下: 解析: 1)判断是否有摄像头checkCameraHardware(this) 2)获得相机camera = Ca ...
- Android开发之拍照功能实现(附源码)
大家好,这是一个简单的拍照功能,很简单的界面,一个显示图像区域SurfaceView一个"拍照"按钮.直接上代码! 1.CameraDemoActivity.java(主界面) p ...
- Android开发 Camera2开发_1_拍照功能开发
Android开发 Camera2开发_1_拍照功能开发 介绍 google已经在Android5.1之后取消了对Camera1的更新,转而提供了功能更加强大的Camera2.虽然新版本依然可以使用C ...
- android程序设计拍照,Android编程实现拍照功能的2种方法分析
本文实例讲述了Android编程实现拍照功能的2种方法.分享给大家供大家参考,具体如下: Android系统的照相功能,已实现2种方法,可供大家参考: 1. 调用系统摄像头来拍照 首先,找到Andro ...
- 怎么用程序实现调用Android手机的拍照功能
怎么用程序实现调用Android手机的拍照功能 转载于:https://blog.51cto.com/1553021/643408
- android 静默拍照功能,Android实现静默拍照功能
本文实例为大家分享了Android实现静默拍照功能的具体代码,供大家参考,具体内容如下 1.申请权限(6.0以后要动态申请) 2.创建相机工具类 CameraPreview: public class ...
- android 三星调用拍照功能吗,Android 开发手机(三星)拍照应用照片旋转问题解决办法...
Android 开发手机(三星)拍照应用照片旋转问题解决办法 最近解决了一个令我头疼好久的问题,就是三星手机拍照图片旋转的问题,项目中有上传图片的功能,那么涉及到拍照,从相册中选择图片,别的手机都ok ...
- android 打开相机拍照功能吗,Android调用相机实现拍照功能
引言 在Android开发中相信大家都会遇到修改用户头像的问题,用户信息常常包含用户头像,一般流程为:默认头像-->用户修改(拍照/相册选择)-->保存头像图片. 本期我们就来实现调用系统 ...
最新文章
- 你只使用到了 VS Code 20% 的功能?让 VS Code 首著作者带你玩转 VS Code!
- Redis重新连接弹性
- “汇新杯”新兴科技+互联网创新大赛青年创客专项赛决赛
- 苹果系统从零开始--MAC OS X 教程1 -- Finder
- 清华大学郑莉c++答疑
- 数据结构题:由逆置数组方法——逆置线性表L的所有元素
- 全国计算机一级12月考试答案,12月到12月全国高校计算机等级考试(广西考区)一级笔试真题及答案...
- 使用 ESLint 禁止项目导入特定模块
- 线性表的顺序存储结构--数组(顺序表)、栈、队列
- NGINX 自动列目录
- vulkan sdk 下载地址
- 行为主义心理学在游戏领域的10年发展
- HTML+CSS期末大作业:家乡旅游网站设计——山东菏泽(6页) 简单个人网页设计作业 静态HTML旅行主题网页作业 DW个人网站模板下载 大学生简单个人网页作品代码
- 求解-----组合优化问题
- 计算机链接投影仪后不显示桌面,win10系统连接投影后不显示桌面图标怎么办
- 如何下载B站视频,解决视频没有声音/音画分离问题(IDM+Potplayer)
- HTML+CSS整理大全
- JavaScript进阶-高级特性及ES6
- 英文中常见连读规律总结
- Hyper-V共享主机磁盘 2021-12-10