2012-11-14 118 views
0

我正在使用Android SDK附帶的API演示中的CameraPreview。在相機預覽正在運行時,如果我關閉了我的屏幕並再次打開它,則相機預覽完全變黑。該設備的相機應用程序設法恢復相機預覽,所以一定有辦法。屏幕關閉後,相機預覽完全變黑,屏幕上顯示

並非我試過的所有設備都表現出這種行爲。我無法確認,但似乎操作系統版本很重要。

回答

1

您需要釋放並重新暫停/恢復攝像機。以下是我的CameraView部件中的一些代碼:

public void onPause(){ 
    if(camera != null){ 
     camera.release(); 
     camera = null; 
    } 
} 

public void onResume(){ 
    //Need to release if we already have one, or we won't get the camera 
    if(camera != null){ 
     camera.release(); 
     camera = null;   
    } 
    try { 
     camera = Camera.open(); 
    } 
    catch (Exception e){ 
    } 

} 
+0

我正在使用API​​演示。他們已經在onPause和onResume中獲取/釋放相機。 – Karakuri

+1

那麼不知道。但是在編寫我的應用程序時,我確實知道我有這個問題,並且這是修正它的確切代碼。 –

0

我有同樣的問題。也許,這不是最好的解決方案,但它適用於我。 在onPause()方法中重新啓動您的相機活動。

private boolean isBackPreesed = false; 

@Override 
public void onPause() { 
    if (camera != null) { 
     camera.release(); 
     camera = null; 
    } 

    if (!isBackPreesed) { 
     finish(); 
     Intent restart = new Intent(this, this.getClass()); 
     startActivity(restart); 
    } 
} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     isBackPreesed = true; 
    }  
    return super.onKeyDown(keyCode, event); 
} 
1

什麼幫助我是onResume()中的setContentView()。

它可以是

protected void onResume() { 
    super.onResume(); 
    setContentView(R.layout.xxx); 
    // ... 
} 

private View cachedContentView; 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    cachedContentView = doCreateContentView(getLayoutInflater()); 
    // ... 
} 
protected void onResume() { 
    super.onResume(); 
    setContentView(cachedContentView); 
    // ... 
} 

他們兩人的工作。

0

我的解決方法是釋放相機在surfaceDestroyed方法不onPause方法並重新啓動相機在surfaceCreated方法。結果很好。

+0

那麼,你認爲它的答案有多遠,而不是評論? – Gahan