2013-02-13 68 views
1

我在Android上工作onPreviewFrame(byte[] data, Camera camera)。在onPreviewFrame中我做了一些图像处理。在onPreviewFrame中,我想停止预览(我通过if语句知道该点)并播放声音 - 可能是电话铃声。我认为你不能在预览中播放声音。退出预览框并通知用户

如何退出onPreviewFrame并在哪里添加播放声音的代码?

表面是否被摧毁?

这里是我的代码:

public class MyCameraPreview extends Activity {  
private Preview mPreview; 
    public TextView results; 



    @Override 
      protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Hide the window title. 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 

     // Create our Preview view and set it as the content of our activity. 
     mPreview = new Preview(this); 
     setContentView(mPreview); 

    } 
} 


class Preview extends SurfaceView implements SurfaceHolder.Callback, PreviewCallback { 

    SurfaceHolder mHolder; 
    Camera mCamera; 
    public TextView results; 
    public TextView txt; 
    private Parameters parameters; 
    //this variable stores the camera preview size  
    private Size previewSize; 
    //this array stores the pixels as hexadecimal pairs  
    private int[] pixels; 
    public int[] argb8888; 

    Preview(Context context) { 
     super(context); 
     // Install a SurfaceHolder.Callback so we get notified when the 
     // underlying surface is created and destroyed. 
     mHolder = getHolder(); 
     mHolder.addCallback(this); 
     mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    } 

    public void surfaceCreated(SurfaceHolder holder) { 
     // The Surface has been created, acquire the camera and tell it where 
     // to draw. 
     mCamera = Camera.open(); 
     try { 
      mCamera.setPreviewDisplay(holder); 

      //sets the camera callback to be the one defined in this class 
      mCamera.setPreviewCallback(this); 

      parameters = mCamera.getParameters(); 
      parameters.setZoom(parameters.getMaxZoom()); 
      mCamera.setParameters(parameters); 
      parameters = mCamera.getParameters(); 
      previewSize = parameters.getPreviewSize(); 
      pixels = new int[previewSize.width * previewSize.height]; 


     } catch (IOException exception) { 
      mCamera.release(); 
      mCamera = null; 
      // TODO: add more exception handling logic here 
     } 
    } 

    public void surfaceDestroyed(SurfaceHolder holder) { 
     // Surface will be destroyed when we return, so stop the preview. 
     // Because the CameraDevice object is not a shared resource, it's very 
     // important to release it when the activity is paused. 

     mCamera.stopPreview(); 
     mCamera.release(); 
     mCamera = null; 



    } 

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
     // Now that the size is known, set up the camera parameters and begin 
     // the preview. 
     parameters.setPreviewSize(w, h); 
     //set the camera's settings 
     mCamera.setParameters(parameters); 
     mCamera.startPreview(); 


    } 

    @Override 
    public void onPreviewFrame(byte[] data, Camera camera) { 


Do some image processing. 


If condition == true { 

Exit the preview and then play the ringtone and exit the application. 

} 

    } 

回答

1

在预览中,您可以添加一个监听器的定义,并用它来未doint在预览的声音。

事情是这样的:

public static interface OnPreviewListener { 
    void onImageMakeSound(); 
} 

public void setListener(OnPreviewListener listener) { 
     this.listener = listener; 
} 

然后在您的onPreviewFrame方法:

@Override 
public void onPreviewFrame(byte[] data, Camera camera) { 
    if (countFrame > 5) { 
     imageBytes = data; 
     countFrame = 0; 
     if (listener != null) 
      listener.onImageMakeSound(); 
    } 
    countFrame++; 
    camera.addCallbackBuffer(data); 
    return; 
} 

在你的活动,必须实现OnPreviewListener

@Override 
    public void onImageMakeSound() { 
     alarmSoundOn(); 

    } 
+0

我做什么ü告诉我但我得到错误this.listener = listener;没有找到一个变量,所以只是在上面声明的变量,但仍然没有工作。 – user2068874 2013-02-13 17:03:51

+0

您需要将其声明为 – 2013-02-13 17:11:06

+0

非常感谢。有用! – user2068874 2013-02-13 18:12:46