Я автоматически фокусирую каждые 3 секунды, и мой код работает на моем аппаратном устройстве (Galaxy S), но на моем AVD (виртуальном устройстве) обратный вызов, который должен быть вызван после завершения фокуса, никогда не вызван. Кто-то знает почему?android: onAutoFocus() не запускается на android 4.0 (мороженое сэндвич) виртуальное устройство
public void onPreviewStart(){
Log.v(TAG,"onPreviewStart() focusTimer: "+focusTimer);
if(this.autoFocus == true && getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)){
focusTimer = new Runnable() {
public void run() {
Log.d(TAG, "focus run..");
if(preview != null && preview.camera != null && !saving){
focusing = true;
Log.d(TAG, "focusing.."+preview);
// ----> this gets called each 3 seconds
preview.camera.autoFocus(new Camera.AutoFocusCallback() {
public void onAutoFocus(boolean success, Camera camera) {
// ----> this never gets called on ICS :(
Log.d(TAG, "onAutoFocus()");
focusing = false;
if(shootButtonWasPressed){ // if shooting was scheduled
Log.d(TAG, "shootButtonWasPressed");
shoot();
shootButtonWasPressed = false;
}
}
});
}
preview.postDelayed(focusTimer, 3000);
}
};
Log.v(TAG,"focusTimer run()");
focusTimer.run();
}else{
focusTimer = null;
}
}
Я не понимаю, почему getPackageManager(). HasSystemFeature (PackageManager.FEATURE_CAMERA_AUTOFOCUS) возвращает истину тогда. Если веб-камера не имеет функции фокуса, андроид должен обязательно вернуть false здесь. Или я не вижу здесь? – stoefln
Вы правы, он возвращает true, но аппаратный элемент (веб-камера) нормально не поддерживает это. Попробуйте это на реальном устройстве, там он будет работать! – safari
Вы правы - он работает на реальном аппаратном устройстве – stoefln