Android 安卓-如何根据计时器拍照

Android 安卓-如何根据计时器拍照,android,android-intent,android-camera,Android,Android Intent,Android Camera,我想实现一项服务,在指定的一天中的某个时间,手机将自动拍照 从现在起,我开始学习官方教程: public class PhotoHandler { Activity a; public PhotoHandler(Activity a) { this.a = a; } public void takePicture() { Intent imageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File im

我想实现一项服务,在指定的一天中的某个时间,手机将自动拍照

从现在起,我开始学习官方教程:

public class PhotoHandler {

Activity a;

public PhotoHandler(Activity a) {
    this.a = a;
}

public void takePicture() {
    Intent imageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyITTTPictures");
    imagesFolder.mkdirs();
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File image = new File(imagesFolder, timeStamp+".jpg");
    Uri uriSavedImage = Uri.fromFile(image);
    imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
    a.startActivityForResult(imageIntent, 0);
}
}

启动我的应用程序,我可以控制我的相机,但我必须手动拍照;我想让她在我设定的计时器启动时拍照。 有没有办法让她自动拍照?

可以随时触发相机拍照

舱单:

拍照

public class MakePhotoActivity extends Activity {
  private final static String DEBUG_TAG = "MakePhotoActivity";
  private Camera camera;
  private int cameraId = 0;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // do we have a camera?
    if (!getPackageManager()
        .hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
      Toast.makeText(this, "No camera on this device", Toast.LENGTH_LONG)
          .show();
    } else {
      cameraId = findFrontFacingCamera();
      if (cameraId < 0) {
        Toast.makeText(this, "No front facing camera found.",
            Toast.LENGTH_LONG).show();
      } else {
        camera = Camera.open(cameraId);
      }
    }
  }

  public void onClick(View view) {
    camera.takePicture(null, null,
        new PhotoHandler(getApplicationContext()));
  }

  private int findFrontFacingCamera() {
    int cameraId = -1;
    // Search for the front facing camera
    int numberOfCameras = Camera.getNumberOfCameras();
    for (int i = 0; i < numberOfCameras; i++) {
      CameraInfo info = new CameraInfo();
      Camera.getCameraInfo(i, info);
      if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
        Log.d(DEBUG_TAG, "Camera found");
        cameraId = i;
        break;
      }
    }
    return cameraId;
  }

  @Override
  protected void onPause() {
    if (camera != null) {
      camera.release();
      camera = null;
    }
    super.onPause();
  }

} 
public类MakePhotoActivity扩展活动{
私有最终静态字符串DEBUG_TAG=“MakePhotoActivity”;
私人摄像机;
私有int-cameraId=0;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//我们有照相机吗?
如果(!getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_摄像头)){
Toast.makeText(此“此设备上没有摄像头”,Toast.LENGTH\u LONG)
.show();
}否则{
cameraId=findFrontFacingCamera();
if(cameraId<0){
Toast.makeText(此“未找到前向摄像头”,
Toast.LENGTH_LONG).show();
}否则{
摄像机=摄像机。打开(摄像机阵列);
}
}
}
公共void onClick(视图){
照相机。拍照(空,空,
新的PhotoHandler(getApplicationContext());
}
专用int findFrontFacingCamera(){
int cameraId=-1;
//搜索前向摄像头
int numberOfCameras=Camera.getNumberOfCameras();
对于(int i=0;i
编辑:cameraId并不总是设置为-1,它只是一个占位符,而您正在寻找正面摄像头。找到后,cameraId将设置为该相机的索引,用于随时触发相机拍照

舱单:

拍照

public class MakePhotoActivity extends Activity {
  private final static String DEBUG_TAG = "MakePhotoActivity";
  private Camera camera;
  private int cameraId = 0;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // do we have a camera?
    if (!getPackageManager()
        .hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
      Toast.makeText(this, "No camera on this device", Toast.LENGTH_LONG)
          .show();
    } else {
      cameraId = findFrontFacingCamera();
      if (cameraId < 0) {
        Toast.makeText(this, "No front facing camera found.",
            Toast.LENGTH_LONG).show();
      } else {
        camera = Camera.open(cameraId);
      }
    }
  }

  public void onClick(View view) {
    camera.takePicture(null, null,
        new PhotoHandler(getApplicationContext()));
  }

  private int findFrontFacingCamera() {
    int cameraId = -1;
    // Search for the front facing camera
    int numberOfCameras = Camera.getNumberOfCameras();
    for (int i = 0; i < numberOfCameras; i++) {
      CameraInfo info = new CameraInfo();
      Camera.getCameraInfo(i, info);
      if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
        Log.d(DEBUG_TAG, "Camera found");
        cameraId = i;
        break;
      }
    }
    return cameraId;
  }

  @Override
  protected void onPause() {
    if (camera != null) {
      camera.release();
      camera = null;
    }
    super.onPause();
  }

} 
public类MakePhotoActivity扩展活动{
私有最终静态字符串DEBUG_TAG=“MakePhotoActivity”;
私人摄像机;
私有int-cameraId=0;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//我们有照相机吗?
如果(!getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_摄像头)){
Toast.makeText(此“此设备上没有摄像头”,Toast.LENGTH\u LONG)
.show();
}否则{
cameraId=findFrontFacingCamera();
if(cameraId<0){
Toast.makeText(此“未找到前向摄像头”,
Toast.LENGTH_LONG).show();
}否则{
摄像机=摄像机。打开(摄像机阵列);
}
}
}
公共void onClick(视图){
照相机。拍照(空,空,
新的PhotoHandler(getApplicationContext());
}
专用int findFrontFacingCamera(){
int cameraId=-1;
//搜索前向摄像头
int numberOfCameras=Camera.getNumberOfCameras();
对于(int i=0;i
编辑:cameraId并不总是设置为-1,它只是一个占位符,而您正在寻找正面摄像头。找到后,cameraId将设置为该相机的索引,用于随时触发相机拍照

舱单:

拍照

public class MakePhotoActivity extends Activity {
  private final static String DEBUG_TAG = "MakePhotoActivity";
  private Camera camera;
  private int cameraId = 0;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // do we have a camera?
    if (!getPackageManager()
        .hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
      Toast.makeText(this, "No camera on this device", Toast.LENGTH_LONG)
          .show();
    } else {
      cameraId = findFrontFacingCamera();
      if (cameraId < 0) {
        Toast.makeText(this, "No front facing camera found.",
            Toast.LENGTH_LONG).show();
      } else {
        camera = Camera.open(cameraId);
      }
    }
  }

  public void onClick(View view) {
    camera.takePicture(null, null,
        new PhotoHandler(getApplicationContext()));
  }

  private int findFrontFacingCamera() {
    int cameraId = -1;
    // Search for the front facing camera
    int numberOfCameras = Camera.getNumberOfCameras();
    for (int i = 0; i < numberOfCameras; i++) {
      CameraInfo info = new CameraInfo();
      Camera.getCameraInfo(i, info);
      if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
        Log.d(DEBUG_TAG, "Camera found");
        cameraId = i;
        break;
      }
    }
    return cameraId;
  }

  @Override
  protected void onPause() {
    if (camera != null) {
      camera.release();
      camera = null;
    }
    super.onPause();
  }

} 
public类MakePhotoActivity扩展活动{
私有最终静态字符串DEBUG_TAG=“MakePhotoActivity”;
私人摄像机;
私有int-cameraId=0;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//我们有照相机吗?
如果(!getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_摄像头)){
Toast.makeText(此“此设备上没有摄像头”,Toast.LENGTH\u LONG)
.show();
}否则{
cameraId=findFrontFacingCamera();
if(cameraId<0){
Toast.makeText(此“未找到前向摄像头”,
Toast.LENGTH_LONG).show();
}否则{
摄像机=摄像机。打开(摄像机阵列);
}
}
}
公共void onClick(视图){
照相机。拍照(空,空,
新的PhotoHandler(getApplicationContext());
}
专用int findFrontFacingCamera(){
int cameraId=-1;
//搜索前向摄像头
int numberOfCameras=Camera.getNumberOfCameras();
对于(int i=0;i
编辑:cameraId并不总是设置为-1,它只是一个占位符,而您正在寻找正面摄像头。找到后,cameraId将设置为该相机的索引,用于随时触发相机拍照

舱单:

拍照

public class MakePhotoActivity extends Activity {
  private final static String DEBUG_TAG = "MakePhotoActivity";
  private Camera camera;
  private int cameraId = 0;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // do we have a camera?
    if (!getPackageManager()
        .hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
      Toast.makeText(this, "No camera on this device", Toast.LENGTH_LONG)
          .show();
    } else {
      cameraId = findFrontFacingCamera();
      if (cameraId < 0) {
        Toast.makeText(this, "No front facing camera found.",
            Toast.LENGTH_LONG).show();
      } else {
        camera = Camera.open(cameraId);
      }
    }
  }

  public void onClick(View view) {
    camera.takePicture(null, null,
        new PhotoHandler(getApplicationContext()));
  }

  private int findFrontFacingCamera() {
    int cameraId = -1;
    // Search for the front facing camera
    int numberOfCameras = Camera.getNumberOfCameras();
    for (int i = 0; i < numberOfCameras; i++) {
      CameraInfo info = new CameraInfo();
      Camera.getCameraInfo(i, info);
      if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
        Log.d(DEBUG_TAG, "Camera found");
        cameraId = i;
        break;
      }
    }
    return cameraId;
  }

  @Override
  protected void onPause() {
    if (camera != null) {
      camera.release();
      camera = null;
    }
    super.onPause();
  }

} 
公共