2015-04-06 5 views
1

Я не могу подключить камеру заднего вида HTC M8 к автофокусу. Нет ничего плохого в оборудовании, поскольку фотоаппарат будет идеально сфокусирован (и на объективе нет грязи).HTC One (M8) FOCUS_MODE_CONTINUOUS_PICTURE не работает

Первоначально я думал, что, возможно, что-то не так в моем коде, но затем я попробовал камеру Commonsware app/library, и у меня получился тот же результат - изображение, которое размыто с самого начала, которое не прилагает никаких усилий для фокусировки. Я пробовал один и тот же код на Nexus 4 и Galaxy 3, и они отлично работают. Я также сделал тест params.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); на M8, и он возвращает true.

Я тоже попробовал mCamera.autoFocus(...), и это не сработало, поэтому я не из идей.

Передняя камера отлично подходит для автофокусировки с камерой Commonsware. Приложение Instagram также отлично работает, поэтому они делают что-то особенное, чтобы заставить его работать.

EDIT Просто попробовал тот же код для друзей HTC One Dual Sim, и фокус работает отлично. Я также сделал перезагрузку с M8, и все еще не работает.

ответ

-1

Привет, У меня такая же проблема при автофокусировке с HTC M8. Мой код отлично работает на HTC m7 и других устройствах.

У меня изменить код следующего образом

import android.hardware.Camera; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.hardware.Camera.AutoFocusCallback; 
import android.os.Bundle; 
import android.app.Activity; 
import android.util.Log; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.Window; 
import android.view.WindowManager; 

public class Main extends Activity implements SurfaceHolder.Callback, SensorEventListener, AutoFocusCallback { 
Camera mCamera; 
SurfaceView mPreview; 
Sensor mAccelerometer; 
SensorManager mSensorManager; 

float motionX = 0; 
float motionY = 0; 
float motionZ = 0; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN 
      | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
    setContentView(R.layout.main); 

    mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 

    mPreview = (SurfaceView)findViewById(R.id.preview); 
    mPreview.getHolder().addCallback(this); 
    mPreview.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
} 

public void onResume() { 
    Log.d("System","onResume"); 
    super.onResume(); 
    mCamera = Camera.open(); 
    mSensorManager.registerListener(this, mAccelerometer 
      , SensorManager.SENSOR_DELAY_NORMAL); 
} 

public void onPause() { 
    Log.d("System","onPause"); 
    super.onPause(); 
    mCamera.release(); 
    mSensorManager.unregisterListener(this, mAccelerometer); 
} 

public void onAccuracyChanged(Sensor arg0, int arg1) { } 

public void onSensorChanged(SensorEvent event) { 
    if(Math.abs(event.values[0] - motionX) > 0.2 
     || Math.abs(event.values[1] - motionY) > 0.2 
     || Math.abs(event.values[2] - motionZ) > 0.2) { 
     Log.d("Camera System", "Refocus"); 
     try { 
      mCamera.autoFocus(this); 
     } catch (RuntimeException e) { } 
    } 

    motionX = event.values[0]; 
    motionY = event.values[1]; 
    motionZ = event.values[2]; 
} 

public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { 
    Log.d("CameraSystem","surfaceChanged"); 
    Camera.Parameters params = mCamera.getParameters(); 
    List<Camera.Size> previewSize = params.getSupportedPreviewSizes(); 
    List<Camera.Size> pictureSize = params.getSupportedPictureSizes(); 
    params.setPictureSize(pictureSize.get(0).width, pictureSize.get(0).height); 
    params.setPreviewSize(previewSize.get(0).width, previewSize.get(0).height); 
    params.setJpegQuality(100); 
    mCamera.setParameters(params); 

    try { 
     mCamera.setPreviewDisplay(mPreview.getHolder()); 
     mCamera.startPreview(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public void surfaceCreated(SurfaceHolder arg0) { } 

public void surfaceDestroyed(SurfaceHolder arg0) { } 

public void onAutoFocus(boolean success, Camera camera) { 
    Log.d("CameraSystem","onAutoFocus"); 
} 
} 

И XML, как следующее:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<SurfaceView 
    android:id="@+id/preview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

</RelativeLayout> 

Надеется, что это поможет вам

 Смежные вопросы

  • Нет связанных вопросов^_^