android 自定义camera 自动拍照

可以自动拍照的是魅族android版本5.01,不能自动拍照的是android版本5.1。是系统问题吗?
自动拍照功能在一些手机上可以使用,一些不能用。求原因 。坐等答案。

 public class CameraActivity extends Activity {
    private CameraView view;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getWindow().clearFlags(
                WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
        requestWindowFeature(Window.FEATURE_NO_TITLE);// 设置横屏模式以及全屏模式

        view = new CameraView(this);// 通过一个surfaceview的view来实现拍照
        view.setId(1);
        view = new CameraView(this, this);
        setContentView(R.layout.camera_layout);
        RelativeLayout relative = (RelativeLayout) this.findViewById(R.id.ly);
        RelativeLayout.LayoutParams Layout = new RelativeLayout.LayoutParams(3, 3);// 设置surfaceview使其满足需求无法观看预览
        Layout.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 1);
        Layout.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, 1);

        relative.addView(view, Layout);

    }

}



(2) CameraView.java

package com.camera.test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Point;
import android.graphics.PointF;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.ShutterCallback;
import android.media.AudioManager;
import android.media.FaceDetector;
import android.media.FaceDetector.Face;
import android.os.Environment;
import android.os.Handler;

import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Toast;

public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
        Camera.PictureCallback
{

    private SurfaceHolder holder;
    private Camera camera;
    private Camera.Parameters parameters;
    private Activity act;
    private Handler handler = new Handler();
    private Context context;
    private SurfaceView surfaceView;
    private AudioManager audio;
    private int current;

    public CameraView(Context context) {
        super(context);

        surfaceView = this;
        audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
        final int current = audio.getRingerMode();
        audio.setRingerMode(AudioManager.RINGER_MODE_SILENT);
        this.context = context;
        holder = getHolder();// 生成Surface Holder
        holder.addCallback(this);
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);// 指定Push Buffer

        handler.postDelayed(new Runnable() {

            @Override
            public void run() {
                if (camera == null) {
                    handler.postDelayed(this, 1 * 1000);// 由于启动camera需要时间,在此让其等两秒再进行聚焦知道camera不为空
                } else {
                    camera.autoFocus(new AutoFocusCallback() {
                        @Override
                        public void onAutoFocus(boolean success, Camera camera) {
                            if (success) {
                                camera.takePicture(new ShutterCallback() {// 如果聚焦成功则进行拍照
                                            @Override
                                            public void onShutter() {
                                            }
                                        }, null, CameraView.this);
                            } else {
                            }
                        }
                    });
                }
            }
        }, 2 * 1000);
    }

    public CameraView(Context context, Activity act) {// 在此定义一个构造方法用于拍照过后把CameraActivity给finish掉
        this(context);
        this.act = act;
    }

    @Override
    public void surfaceCreated(final SurfaceHolder holder) {
        // TODO Auto-generated method stub

        camera = Camera.open();// 摄像头的初始化
        handler.postDelayed(new Runnable() {

            @Override
            public void run() {
                if (holder != null) {
                    try {
                        camera.setPreviewDisplay(holder);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                } else {
                    handler.postDelayed(this, 1 * 1000);
                }
            }
        }, 2 * 1000);
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        // TODO Auto-generated method stub

        parameters = camera.getParameters();
        camera.setParameters(parameters);// 设置参数
        camera.startPreview();// 开始预览
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO Auto-generated method stub

    } 

    public void onPictureTaken(byte[] data, Camera camera) {// 拍摄完成后保存照片

        try {

            Date date = new Date();
            SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
            String time = format.format(date);

            //在SD卡上创建文件夹
            File file = new File(Environment.getExternalStorageDirectory()
                    + "/myCamera/pic");
            if (!file.exists()) {

                file.mkdirs();
            }

            String path = Environment.getExternalStorageDirectory()
                    + "/myCamera/pic/" + time + ".jpg";
            data2file(data, path);
            camera.setPreviewCallback(null);
            camera.stopPreview();
            camera.release();
            camera = null;
            holder.removeCallback(CameraView.this);
            audio.setRingerMode(current);
            act.finish();
            //uploadFile(path);

        } catch (Exception e) {

        }

    }

    private void data2file(byte[] w, String fileName) throws Exception {// 将二进制数据转换为文件的函数
        FileOutputStream out = null;
        try {
            out = new FileOutputStream(fileName);
            out.write(w);
            out.close();
        } catch (Exception e) {
            if (out != null)
                out.close(); 
            throw e;
        }
    }
//  private void uploadFile(String filePath)// 拍照过后上传文件到服务器
//  {
//  }

}

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于 Android 自定义相机照片旋转问题

最近在做一款 Android 端的自定义相机,发现有些手机(如三星、LG,大部分手机是正确的)拍出的照片方向并不对, 且通过 Exif 信息读取到的 旋转角度是 0,也就是说没有办法通过旋转角度去纠正所拍摄的照片。 另外,我在有问题的相机上装了其他类型的自定义相机,发现有些相机是可以拍摄出正确角度的照片的。 所以想问下大佬有什么合适解决方案,谢过!

android自定义相机Camera.takePicture(a, b,c);

/* * 好像是点击拍照后保存的数据,但是不知道问啥一直为空,不知道哪里出错了,一直未未找到原因 * * */ Camera.PictureCallback pictureCallback1 = new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] bytes, Camera camera) { Utils.Log(bytes + "---bytes就是空,我就是null"); } };

android自定义相机预览界面动态设置相机爆光值

android自定义相机预览界面动态设置相机爆光值 求高手请教:自己写了一个相机应用程序,使用SurfaceView方法自定义预览界面,可以正常预览,但是我想实现Android的系统照相机中可动态调整相机一些参数设置(例如 爆光值的增加、减小)。大侠们有没有好的方法可以参考的,感谢 想实现效果如图: ![图片说明](https://img-ask.csdn.net/upload/201504/10/1428634849_619333.jpg)

Android自定义相机防拉伸问题,已入坑求解救!!!

对于自定义相机,我们设置他的预览尺寸PreviewSize的时候,是要通过获取系统支持的预览尺寸getSupportedPreViewSize获得的。但是getSupportedPreViewSize集合,遍历每个尺寸的时候,都会发现他的宽度大于高度的,为了防止预览图像拉伸,我们是不是应该预览界面SurfaceView的宽度大于高度。但是又不科学,比如相机旋转90度,刚刚使我们正拿着手机的角度,此时高大于宽,但是系统相机全屏都是好好的,完全没有拉伸的。这到底是个什么情况,求解答!!!求脱坑!!!

Android 自定相机 Camera 部分手机 预览时、拍照都模糊问题

各位帅哥、美女:Android 自定相机 surfaceView ,Camera 部分手机 预览时、拍照都模糊问题, 没有预览、拍照没有模糊的手机,把屏幕为竖屏,在清单文件里面配成横屏也模糊了,请问各位遇到过吗???

Android中使用Camera2开发聚焦,前后摄像头切换的拍照功能

使用Camera2开发照相机功能,可以进行重复拍照,刚开始拍照是好的,但是重复拍照的时候就会报错如下,有时候第一次拍照就报错,有时候拍了几十张后报错,报错就是闪退 E/AndroidRuntime: FATAL EXCEPTION: LegacyCameraCallback     Process: com.ajmd.hais.mobile, PID: 24711     java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Surface android.hardware.camera2.params.OutputConfiguration.getSurface()' on a null object reference         at android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks.onCaptureErrorLocked(CameraDeviceImpl.java:1925)         at android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks.onDeviceError(CameraDeviceImpl.java:1693)         at android.hardware.camera2.legacy.CameraDeviceUserShim$CameraCallbackThread$CallbackHandler.handleMessage(CameraDeviceUserShim.java:299)         at android.os.Handler.dispatchMessage(Handler.java:102)         at android.os.Looper.loop(Looper.java:154)         at android.os.HandlerThread.run(HandlerThread.java:61)

Android相机自定义预览区大小

如图,我想在手机屏幕的某一块区域中做相机的预览,但是在竖屏情况下,人脸不能拉伸或收缩,要保持原来的比例,请问该怎么做,被这个问题困扰很久了 ![图片说明](https://img-ask.csdn.net/upload/201509/02/1441186234_609254.png)

android自定义相机如何获取原始图片数据

Camera.AutoFocusCallback autoFocusCallback = new Camera.AutoFocusCallback() { @Override public void onAutoFocus(boolean success, Camera camera) { if (isTake) { // 点击拍照按钮 对焦 后 拍照 // 第一个参数 是拍照的声音,未压缩的数据,压缩后的数据 // mCamera.takePicture(null, null, CameraActivity.this); mCamera.takePicture(new Camera.ShutterCallback() { @Override public void onShutter() { } }, new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] bytes, Camera camera) { } }, new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { isTake = false; setResult(CAMERARESULT, new Intent().putExtra("data", data)); finish(); } }); } }

android 拍照保存下来的图片用自带的图片浏览应用打不开

**是这样的,我照着官方上面Camera的使用代码写了一遍,照的图片的确是保存在指定目录了,但是点击图片的时候自带的相册浏览应用无法打开,官方保存的文件类型是jpg的。我发现打不开,然后我试着用别的应用把后缀名改成jpeg,改了名之后奇迹般的,自带的相册应用就能打开了!然后我怀疑是不是文件类型名的问题,我把保存的图片类型从jpg改成jpeg,然后发现,打不开!最后我发现了问题:无论我保存的是什么类型(jpg或jpeg)的图片文件,只有把它再一次重命名(从jpg改成jpeg或从jpeg改成jpg),我的图片浏览应用才能打开。各位大神,请问是什么原因? params.setPictureFormat(ImageFormat.JPEG)这句代码我也试过了,还是不行 各位大神帮帮忙,小弟在此先谢过了**

android camera2 获取相机当前值的问题

我想给主页面的seekBar动态赋值,要达到的效果是: 当我在自动调焦的情况下,晃动手机,由于焦距变换,seekbar的值会一直变。 怎样可以取到相机的当前值呢?那位大神可以帮我解决下?

camera 调节亮度,饱和度 ,锐度

最近在做一个自定义相机 需要调节他的亮度,饱和度 ,锐度一些参数,请教大神,怎么做

安卓camera开发时怎么在预览的时候做镜像功能????

安卓camera开发时怎么在预览的时候做镜像功能!!!! 安卓camera开发时怎么在预览的时候做镜像功能!!!!

Android 调用系统相机怎样实现一键拍照、录像。

Android 调用系统相机怎样实现一键拍照、录像。而不是打开界面后还需要点击拍照以及确定。

android 安卓 自定义相机 拍出来的照片右侧有竖条

这是什么原因啊?大神帮助解决一下吧。谢啦!!只有三星的这个手机遇到这个问题,其他的手机都没事。

基于Android camera2的相机开发

最近在开发Android相机,需要调用相机硬件的快门和ISO数据,我曾经用了华为手机来开发,由于双摄像头在录制的时候会崩溃就买了一台小米5来继续开发。令人崩溃的是小米5貌似不开放底层的相机参数,在想要获取ISO及快门的取值范围时返回为空。 现在我有点不知道怎么办了。 下面是我用的代码,就是在这一段出问题,希望有经验的朋友能不能给点意见。 ``` //获取ISO范围 Range<Integer> range1 = characteristics.get(CameraCharacteristics.SENSOR_INFO_SENSITIVITY_RANGE); //获取快门范围 Range<Long> range2 = characteristics.get(CameraCharacteristics.SENSOR_INFO_EXPOSURE_TIME_RANGE); //获取帧间隔范围 Long max3 = characteristics.get(CameraCharacteristics.SENSOR_INFO_MAX_FRAME_DURATION); int max1 = range1.getUpper();//华为P9最大值为3500 int min1 = range1.getLower();//华为P9最小值为100 Long max2 = range2.getUpper()/10 ;//华为P9最大值1s Long min2 = range2.getLower()/200 ;//华为p9最小值100ns int iso = ((Progress[0] * (max1 - min1)) / 100 + min1); Long exposure = ((Progress[1] * (max2 - min2)) / 100 + min2); Long frame = max3 / 1000; //以下分别为ISO,快门,帧间隔 mPreviewBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, iso); mPreviewBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, exposure); mPreviewBuilder.set(CaptureRequest.SENSOR_FRAME_DURATION, frame); ```

Android手机相机拍照后图片存放路径问题

``` <?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="12" path=""> </external-path> </paths> ``` 我将拍照后的照片放在imageiew控件中; 这里的paths路径具体路径是什么? 在哪里查看详细的路径呢?

安卓相机如何加入自动对焦功能?

我反编译清单文件后插入<uses-feature android:name="android.hardware.camera.autofocus" />这个东西没用啊,是不是插错了?跪求大神帮忙。![图片](https://img-ask.csdn.net/upload/201708/05/1501938529_709643.png)

android 调照相机拍照上传时出错问题

手机拍照然后上传图片时,路径不为空为什么总是上传失败啊?但是选择本地相册是成功的,照相之后打印出来的图片路径是/storage/emulated/0/Pictures/1476511270681.jpg。调取照相机的方法用了两种,第一种使用PhotoPicker中的方式;第二种代码如下: private void takePhoto() { String SDState = Environment.getExternalStorageState(); if (SDState.equals(Environment.MEDIA_MOUNTED)) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); SimpleDateFormat timeStampFormat = new SimpleDateFormat( "yyyy_MM_dd_HH_mm_ss"); String filename = timeStampFormat.format(new Date()); ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.TITLE, filename); photoUri = getContentResolver().insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); //Log.e("takePhoto", "-------------"+photoUri.toString()); intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); startActivityForResult(intent, SELECT_PIC_BY_CAMERA); } } 有没有大神遇到过问题啊?请指点一下吧!

求助Android实现连续拍照

Android自定义照相机实现连续拍照用不用开启多线程,我希望能设置张数,点击拍照按键后,能连续拍自己设置的张数

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

立方体线框模型透视投影 (计算机图形学实验)

计算机图形学实验 立方体线框模型透视投影 的可执行文件,亲测可运行,若需报告可以联系我,期待和各位交流

2019 AI开发者大会

2019 AI开发者大会

组成原理课程设计(实现机器数的真值还原等功能)

实现机器数的真值还原(定点小数)、定点小数的单符号位补码加减运算、定点小数的补码乘法运算和浮点数的加减运算。

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

软件测试2小时入门

软件测试2小时入门

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

计算机图形学-球的光照模型课程设计

计算机图形学-球的光照模型,有代码完美运行,有课程设计书

Linux常用命令大全(非常全!!!)

Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错。我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短小但却功能强大。我将我了解到的命令列举一下,仅供大家参考: 系统信息 arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 d...

因为看了这些书,我大二就拿了华为Offer

四年了,四年,你知道大学这四年我怎么过的么?

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

fakeLocation13.5.1.zip

fakeLocation13.5.1 虚拟定位 ios13.5.1的最新驱动下载,iPhone/iPad免越狱虚拟定位工具Location-cleaned驱动已更新

UnityLicence

UnityLicence

Python可以这样学(第一季:Python内功修炼)

Python可以这样学(第一季:Python内功修炼)

Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

土豆浏览器

土豆浏览器可以用来看各种搞笑、电影、电视剧视频

【数据结构与算法综合实验】欢乐连连看(C++ & MFC)案例

这是武汉理工大学计算机学院数据结构与算法综合实验课程的第三次项目:欢乐连连看(C++ & MFC)迭代开发代码。运行环境:VS2017。已经实现功能:开始游戏、消子、判断胜负、提示、重排、计时、帮助。

php+mysql学生成绩管理系统

学生成绩管理系统,分三个模块:学生,教师和管理员。 管理员模块:负责学生、老师信息的增删改;发布课程信息的增删改,以便让学生选课;审核老师提交的学生成绩并且打印成绩存档;按照课号查询每个课号的学生成绩

多功能数字钟.zip

利用数字电子计数知识设计并制作的数字电子钟(含multisim仿真),该数字钟具有显示星期、24小时制时间、闹铃、整点报时、时间校准功能

推荐24个国外黄色网站欣赏

在中国清朝,明黄色的衣服只有皇子才有资格穿,慢慢的黄色在中国就成了高贵的颜色。在人们的色彩印象中,黄色也表现为暂停。所以当你的网页设计采用黄色的时候,会让人们在你的网页前停留。 黄色,就像橙色和红色,黄色也是一个暖色。它有大自然、阳光、春天的涵义,而且通常被认为是一个快乐和有希望的色彩。黄色是所有色相中最能发光的颜色,给人轻快,透明,辉煌,充满希望的色彩印象。 黄色是一个高可见的色...

u-boot-2015.07.tar.bz2

uboot-2015-07最新代码,喜欢的朋友请拿去

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

学生成绩管理系统(PHP + MYSQL)

做的是数据库课程设计,使用的php + MySQL,本来是黄金搭配也就没啥说的,推荐使用wamp服务器,里面有详细的使用说明,带有界面的啊!呵呵 不行的话,可以给我留言!

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

C++语言基础视频教程

C++语言基础视频教程

玩转Python-Python3基础入门

玩转Python-Python3基础入门

相关热词 c# 局部 截图 页面 c#实现简单的文件管理器 c# where c# 取文件夹路径 c# 对比 当天 c# fir 滤波器 c# 和站 队列 c# txt 去空格 c#移除其他类事件 c# 自动截屏
立即提问