首页 > 技术文章 > Camera无法回调picturecallback函数

lengyanyue39 2014-10-23 16:37 原文

============问题描述============


package com.test;   
  
import android.app.Activity;   
import android.hardware.Camera;   
import android.hardware.Camera.PictureCallback;   
import android.os.Bundle;   

public class BootTestActivity extends Activity {    
  
    private Camera mCam;     

    protected void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.main);   
        
                try
                {
                    mCam  = Camera.open();
                    if (mCam != null)
                    {   
                        System.out.println("开始拍照了吗?");
                       mCam.takePicture(null, null, pictureCallBack);   
                       System.out.println("拍照结束了吗?");
                    }       
                }

                catch(Exception e)
                {
                    System.out.println(e);
                }
                finally
                {
                     if (mCam != null) 
                     {
                         mCam .release();
                         System.out.println("release");
                     }
                }                
    }   
    
  
    private PictureCallback pictureCallBack = new Camera.PictureCallback() {

        public void onPictureTaken(byte[] data, Camera camera) {
        
            System.out.println("可是我并没有被调用呀!");
              
                }   
    };         
}  



权限:
     <!-- 授予程序使用摄像头的权限 -->
<uses-feature android:name="android.hardware.camera" />  
<uses-feature android:name="android.hardware.camera.autofocus" />  
<uses-permission android:name="android.permission.CAMERA" />  



为什么呢?在魅族MX2上就没用,但是在三星9300就行

============解决方案1============


试试 四参数的 takepicture  public final void takePicture (Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback postview, Camera.PictureCallback jpeg)

============解决方案2============


open和takepicture最好不要放在onCreate中,建议使用线程来open,待open成功之后再向activity发消息执行takepicture方法

另外,open完后最好执行startpreview

============解决方案3============


引用 11 楼 zmhzhangminhua 的回复:
引用 10 楼 comeoverjava 的回复:
关于拍照,有前置拍照和后置拍照,如果是前置拍照,你如果是用的2.2的SDK,测试手机是2.3就不会回调,2.2的前置拍照,不同的手机,其中传入的参数也不同,想要兼容用反射是可以的

是基于4.0.3的SDK,在4.1.1的机子上运行的问题,调用后置摄像头,主要是魅族手机上就是不回调,在三星上是没问题的,所以想问下有谁遇到过相似的问题


确实没遇到过这个问题,之前在做Camera项目时魅族手机上回调正常,只是摄像头方向有些问题

推荐阅读