Android-Auto-Fokus funktioniert nicht, nachdem die Kamera-Ansicht erstellen
Ich versuche, um meine eigene Blick durch die Kamera, ich habe alles außer der Autofokus, ich kann nicht scheinen, um herauszufinden, warum es nicht funktionieren wird. Hier ist mein code für CameraView.java
public class CameraView extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder surface_Holder;
private Camera main_Camera;
boolean on;
public CameraView(Context context, Camera camera){
super(context);
main_Camera = camera;
main_Camera.setDisplayOrientation(90);
surface_Holder = getHolder();
surface_Holder.addCallback(this);
surface_Holder.setType(SurfaceHolder.SURFACE_TYPE_NORMAL);
}
public boolean isOn(){
return on;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try{
main_Camera.setPreviewDisplay(holder);
main_Camera.startPreview();
}catch (Exception e){
Log.d("Error", "Canmera error on surfaceCreated" + e.getMessage());
main_Camera.release();
main_Camera = null;
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if(holder.getSurface()==null){
return;
}
try{
main_Camera.stopPreview();
}catch (Exception e){
}
try{
main_Camera.setPreviewDisplay(surface_Holder);
main_Camera.startPreview();
}catch (IOException e){
Log.d("Error", "Camera error on surfaceChanged " + e.getMessage());
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
main_Camera.setPreviewCallback(null);
main_Camera.stopPreview();
main_Camera.release();
main_Camera= null;
}
}
In meinem manifest habe ich Folgendes:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
- Können Sie das code-Formatierung? Es ist ein bisschen unklar, mit Ihrer Platzierung von Auszeichnungen jetzt.
- ist das besser?
- Sieht viel besser aus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
wenn Sie Hinzugefügt
<uses-feature android:name="android.hardware.camera.autofocus" />
um Ihre manifest-es bedeutet nicht, die Kamera wirdautofocus
. Es heißt, Sie geben Ihre app die Berechtigung zur Verwendung der Kamera-hardware oder-software, die Pflege der Autofokus.Ihre Kamera zu konzentrieren, können Sie diese Methode, um Ihre
CameraView
Klasse:Und rufen Sie dann diese Methode in
surfaceChanged()
wie diese:Können Sie wählen, zwischen diesen
focus parameters
:<uses-feature android:name="android.hardware.camera" android:required="true"/>
<uses-feature android:name="android.hardware.camera2.full"/>
Hier sind einige Möglichkeiten:
Benutzer arsalank2 empfiehlt die Verwendung der "continuous auto focus", wie beschrieben in diese Antwort. Es scheint jedoch, dass einige HTC-Geräte dies nicht unterstützen. Überprüfen mit:
parameters.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)
Könnten Sie implementieren eine
onSensorChanged
Zuhörer sich mit einem Rückruf, wenn bestimmte Kriterien erfüllt sind, Lesen Sie diese Antwort von Juan Acevedo.Jeden Fall behandeln unterschiedlich auf die Unterstützung einer möglichst breiten Palette von Geräten möglich. Überprüfen, was funktioniert mit verschiedenen Modellen von verschiedenen Geräten, da Sie nicht voll Vertrauen, was die API-Ebene sagt, wird umgesetzt.
Ich würde empfehlen, geht mit option 3, da scheint es keine Methode, die funktioniert für jedes einzelne Gerät.