title: how to call autofocus when motion in device is detected through accelerometer?
body: <p>This is the code I'm using right now:</p>
  
  <pre><code>import android.app.AlertDialog;
  import android.content.DialogInterface;
  import android.content.pm.PackageManager;
  import android.hardware.Camera;
  import android.hardware.Sensor;
  import android.hardware.SensorEvent;
  import android.hardware.SensorEventListener;
  import android.hardware.SensorManager;
  import android.os.Bundle;
  import android.os.Handler;
  import android.support.v7.app.AppCompatActivity;
  import android.util.Log;
  import android.view.SurfaceHolder;
  import android.view.SurfaceView;
  import android.view.View;
  import android.widget.FrameLayout;
  import android.widget.ImageView;
  import android.widget.TextView;
  import android.widget.Toast;
  import android.widget.ZoomControls;
  
  import  android.hardware.Camera.AutoFocusCallback;
  
  import java.io.IOException;
  import java.util.List;
  
  
  public class CameraActivity extends AppCompatActivity implements SurfaceHolder.Callback,SensorEventListener {
  
      Camera camera;
      Camera.Parameters params;
      SurfaceView surfaceView;
      SurfaceHolder surfaceHolder;
      int currentZoomLevel = 0, maxZoomLevel = 0;
      private ImageView flashButton;
      AutoFocusCallback mAutoFocusCallback;
      // Tracker tracker;
      private boolean isFlashOn;
      private boolean hasFlash;
      private ImageView drawerToggle;
      boolean flashOffFirst;
      private SensorManager sensorMan;
      private Sensor accelerometer;
      public boolean var;
      private float[] mGravity;
      private float mAccel;
      private float mAccelCurrent;
      private float mAccelLast;
      public int con = 0;
  
  
  
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
  
  
          surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
          surfaceHolder = surfaceView.getHolder();
          surfaceHolder.addCallback(this);
          surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
          sensorMan = (SensorManager)getSystemService(SENSOR_SERVICE);
          accelerometer = sensorMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
          mAccel = 0.00f;
          mAccelCurrent = SensorManager.GRAVITY_EARTH;
          mAccelLast = SensorManager.GRAVITY_EARTH;
          //  var=safeCameraOpen(0);
  
  
  
      @Override
      public void onSensorChanged(SensorEvent event) {
  
          if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
              mGravity = event.values.clone();
              // Shake detection
              float x = mGravity[0];
              float y = mGravity[1];
              float z = mGravity[2];
              mAccelLast = mAccelCurrent;
              mAccelCurrent = (float) Math.sqrt(x * x + y * y + z * z);
              float delta = mAccelCurrent - mAccelLast;
              mAccel = mAccel * 0.9f + delta;
              // Make this higher or lower according to how much
              // motion you want to detect
              if (mAccel &gt; 0.5 &amp;&amp; params!=null) {
             /*    if (params.getSupportedFocusModes().contains(
                          Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
  
  
                      params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
                  }
                  camera.setParameters(params);
  
                  camera.autoFocus(new AutoFocusCallback() {
                      @Override
                      public void onAutoFocus(boolean success, Camera camera) {
                          if (success) {
  
                              Toast.makeText(getApplicationContext(), "AutoFocus on sensor changed", Toast.LENGTH_SHORT).show();//  camera.takePicture(shutterCallback, rawCallback, jpegCallback);
                          }
                      }
                  });*/
              }
              if(con==1 &amp;&amp; params!=null)
              {
                 /*if (params.getSupportedFocusModes().contains(
                          Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
  
                    //  params.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
                      params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
                  }
                  camera.setParameters(params);*/
  
                  camera.autoFocus(new AutoFocusCallback() {
                      @Override
                      public void onAutoFocus(boolean success, Camera camera) {
                          if (success) {
  
                              Toast.makeText(getApplicationContext(), "AutoFocus on accuracy changed", Toast.LENGTH_SHORT).show();//  camera.takePicture(shutterCallback, rawCallback, jpegCallback);
                          }
                      }
                  });
              }
          }
      }
  
      @Override
      public void onAccuracyChanged(Sensor sensor, int accuracy) {
          switch (accuracy) {
              case 0:
                  System.out.println("Unreliable");
                  con = 0;
                  break;
              case 1:
                  System.out.println("Low Accuracy");
                  con = 0;
                  break;
              case 2:
                  System.out.println("Medium Accuracy");
                  con = 0;
  
                  break;
              case 3:
                  System.out.println("High Accuracy");
                  con = 1;
                  break;
          }
      }
  }
  </code></pre>
  
  <p>Actually sensors are messing with autofocus ,so when i call autofocus in onSensorchanged method of SensorEventlistener  ,the autofocus in onSurfaceChanged ,onSurfaceCreate stops working.Can anybody suggest any solution or any other way.</p>
  
  <p>Thanks in advance.</p>