2012-01-09 40 views
3

我正在使用相機閃光燈的手電筒應用程序。它似乎工作正常,但有時會調用camera.release()導致大約一分鐘左右的掛起。我已經包含下面的代碼。我看了一堆例子,我沒有看到任何可能導致這種事情的東西。有任何想法嗎?app掛在camera.release()

//latest 
    public void setOn(boolean on, Context context) {  

    if (lock) { 
     Log.i(TAG, "lock: true"); 
     return; 
    } 


    if (on) {   
     if (mCamera == null) { 
      mCamera = Camera.open(); 
     } 

     Parameters params = mCamera.getParameters(); 
     params.setFlashMode(MODE_TORCH); 
     mCamera.setParameters(params); 
     mCamera.startPreview(); 
    } else { 
     if (mCamera != null) {    
      try {     
       Parameters params = mCamera.getParameters(); 
       params.setFlashMode(MODE_OFF); 
       mCamera.setParameters(params);     
      } finally { 
       new Thread(new Runnable() { 
        public void run() { 
         Log.i(TAG, "new Thread - start"); 
         lock = true; 
         mCamera.setPreviewCallback(null); 
         mCamera.stopPreview(); 
         mCamera.release(); 
         mCamera = null; 
         lock = false; 
         Log.i(TAG, "new Thread - end"); 
        } 
       }).start();          
      } 
     } 
    } 
} 


//original 
public void setOn(boolean on, Context context) {   
    Camera camera = mCamera; 
    if (on) {   
     if (camera == null) { 
      mCamera = camera = Camera.open(); 
     } 

     Parameters params = camera.getParameters(); 
     params.setFlashMode(MODE_TORCH); 
     camera.setParameters(params); 
     camera.startPreview(); 
    } else { 
     if (camera != null) { 

      try {     
       Parameters params = camera.getParameters(); 
       params.setFlashMode(MODE_OFF); 
       camera.setParameters(params);     
      } finally { 
       camera.stopPreview(); 
       camera.release(); 
       mCamera = camera = null; 
      } 
     } 
    } 
} 
+0

在該設備會發生這種情況?我們在Android 4.3,4.0和5.0(4.2沒有這個問題)的Nexus 10上有完全相同的問題 – DoDo 2014-11-15 21:22:18

回答

1

嘗試把它放在一個線程在後臺運行,所以它不會掛斷用戶界面。

new Thread(new Runnable(){ 
    public void run(){ 
     camera.setPreviewCallback(null); // PreviewCallback de_init. 
     camera.stopPreview(); // stop Preview 
     camera.release(); 
    } 
}).start(); 
+1

謝謝; UI不再懸掛。然而camera.release()仍然掛在這個新線程中。任何線索爲什麼? – user1137832 2012-01-09 02:51:29

+0

看看這個線程討論問題 – 2012-01-09 02:56:10

+0

對不起哪個線程? – user1137832 2012-01-09 03:08:35

0

對我來說,工作的解決辦法是:

Try{ 
    camera.stopPreview(); 
    camera.setPreviewCallback(null); 
    camera.release(); 
    camera = null; 
} catch (Exception e){ 
    //... 
} 
0

I`ve解決了這個isuue添加發布之前camera.unlock()()

camera.stopPreview(); 
camera.setPreviewCallback(null); 
camera.unlock(); 
camera.release(); 
camera = null; 

測試上更多的設備需要...

+1

不幸的是,這並不能解決我們在Nexus 10上遇到的問題。 – DoDo 2014-11-15 21:23:41

0

只需撥打電話

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

你必須調用setPreviewCallback(空)betweeen stopPreview和camera.releass

相關問題