我正在使用Android SDK附帶的API演示中的CameraPreview。在相機預覽正在運行時,如果我關閉了我的屏幕並再次打開它,則相機預覽完全變黑。該設備的相機應用程序設法恢復相機預覽,所以一定有辦法。屏幕關閉後,相機預覽完全變黑,屏幕上顯示
並非我試過的所有設備都表現出這種行爲。我無法確認,但似乎操作系統版本很重要。
我正在使用Android SDK附帶的API演示中的CameraPreview。在相機預覽正在運行時,如果我關閉了我的屏幕並再次打開它,則相機預覽完全變黑。該設備的相機應用程序設法恢復相機預覽,所以一定有辦法。屏幕關閉後,相機預覽完全變黑,屏幕上顯示
並非我試過的所有設備都表現出這種行爲。我無法確認,但似乎操作系統版本很重要。
您需要釋放並重新暫停/恢復攝像機。以下是我的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){
}
}
我有同樣的問題。也許,這不是最好的解決方案,但它適用於我。 在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);
}
什麼幫助我是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);
// ...
}
他們兩人的工作。
我的解決方法是釋放相機在surfaceDestroyed方法不onPause方法並重新啓動相機在surfaceCreated方法。結果很好。
那麼,你認爲它的答案有多遠,而不是評論? – Gahan
我正在使用API演示。他們已經在onPause和onResume中獲取/釋放相機。 – Karakuri
那麼不知道。但是在編寫我的應用程序時,我確實知道我有這個問題,並且這是修正它的確切代碼。 –