2012-04-07 28 views
0

我的手電筒應用程序Android 4.0.4 Nexus S i9020出現問題。 我已經嘗試了幾十個建議貼在這裏在stackoverflow但沒有爲我工作。 該應用程序與Android版本2.3.6一起工作,但自4.0.4以來,火炬已停止工作。火炬應用程序錯誤Android 4.0.4 Nexus S i9020

這裏是我的impl和logcat輸出。

@Override 
protected void onResume() 
{ 
    super.onResume(); 
    _Camera = Camera.open(); 
} 

@Override 
protected void onPause() 
{ 
    if (_Camera != null) 
    { 
     _Camera.release(); 
    } 
} 

//called within runnable and post to a handler 
private void processOffClick() 
{ 

    if (_Camera != null) 
    { 
     Parameters params = _Camera.getParameters(); 
     params.setFlashMode(Parameters.FLASH_MODE_OFF); 
     _Camera.setParameters(params); 
     _Camera.stopPreview(); 
    } 
} 

//called within runnable and post to a handler 
private void processOnClick() 
{ 
    if (_Camera != null) 
    { 
     Parameters params = _Camera.getParameters(); 
     params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
     _Camera.setParameters(params); 
     _Camera.startPreview(); 
    } 
} 

我也嘗試執行onclick offclick方法沒有runnables。

在Logcat中,在執行onclick之後發生folling錯誤。

04-07 14:10:02.719: E/CameraHardwareSec(82): preview window is NULL! 
04-07 14:10:02.719: I/CameraHardwareSec(82): virtual android::status_t android::CameraHardwareSec::startPreview() : deferring 

在市場上有一些相機應用程序與我的手機一起工作。所以必須有一些方法來打開手電筒。

我也嘗試添加一個SurfaceView/Holder,但它沒有工作。也許我做錯了什麼。

乾杯卡里姆

回答

0

4.0以上版本,你需要從表面上看,你正在做的一切就OK了,在版本。聲明一個在你的layout.xml

然後做這樣的事情:

實施SurfaceHolder.Callback

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //init your layout 
     this._surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView); 
     this._surfaceHolder = this._surfaceView.getHolder(); 
     this._surfaceHolder.addCallback(this); 
     this._surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

} 

@Override 
protected void onResume() 
{ 
    super.onResume(); 
    _Camera = Camera.open(); 
    this._camera.startPreview(); 
    this._camera.setPreviewDisplay(this._surfaceHolder); 
} 


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

    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
     //this._surfaceHolder = holder; 
    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
     //this._surfaceHolder = null; 
    } 
+0

非常感謝你它的工作原理。表面視圖至少有1dip的高度和寬度是非常重要的。 – 2012-04-08 18:56:18

+0

我正在做同樣的事情,但仍然得到這個錯誤ics + os – 2013-03-18 09:18:45