Zajmuję się tworzeniem aplikacji, która korzysta z aparatu. Zrobiłem klasę podglądu w ten sposób:Powierzchni aparatu AndroidUmieszany jest stale nazywany
public class MyPreview extends SurfaceView implements SurfaceHolder.Callback, Camera.Preview Callback{
...
public void surfaceCreated(SurfaceHolder holder){
...
mCamera.setPreviewCallback(this);
...
}
public void surfaceDestroyed(SurfaceHolder holder){
...
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h){
...
}
public void onPreviewFrame(byte[] data, Camera camera){
...
}
}
Zasadniczo jest to przykład CameraDemo. Android CameraDemo Example
Problem polega na tym, że surfaceCreated jest wywoływane tylko jeden raz (tak, jak powinno), ale funkcja surfaceChanged jest ciągle wywoływana (zamiast tylko raz lub gdy zmienia się powierzchnia), i uważam, że jest to powód, dla którego onPreviewFrame jest nigdy nie dzwonił. Źródło kamery jest wyświetlane na ekranie i wygląda na to, że działa dobrze, ale tak naprawdę nie jest.
Zabawne jest to, że działa dobrze na Androidzie 2.x, a problemy pojawiają się tylko w systemie Android 4.1. (Nie testowałem tego na innych urządzeniach)
Rozglądałem się i uważam, że to może być prawdziwy powód tego stackoverflow unsolved question i tego another stackoverflow unsolved question i tego code.google case. Ten ostatni przypadek ma "rozwiązanie", ale nie zadziałało to dla mnie.
Więc, wszystkie pomysły na to, dlaczego surfaceChanged są wprowadzane przez cały czas i jak je rozwiązać?
Należy odradzać [Odpowiedzi dotyczące wyłącznie linków] (http://meta.stackoverflow.com/tags/link-only-answers/info), odpowiedzi w formacie SO powinny być punktem końcowym wyszukiwania rozwiązania (vs. kolejny przystanek odniesień, które z czasem stają się nieaktualne). Proszę rozważyć dodanie samodzielnego streszczenia tutaj, zachowując odnośnik jako odniesienie. – kleopatra