J'ai du code avec lequel j'ai fait des expériences pour voir ce que je peux faire avec l'appareil photo. Ce code fonctionne, mais j'ai quelques problèmes avec lesquels je n'arrive pas à résoudre.Problème avec la caméra Android
Le premier appel ne fonctionne jamais. La première fois que vous exécutez le code, le rappel onPictureTaken n'est jamais appelé, donc le fichier n'est jamais écrit. Cependant, la caméra passe par toutes les autres étapes, y compris le bruit de l'obturateur.
Je n'arrive pas à définir la taille de l'image sur autre chose que par défaut. Si j'essaye de le mettre à autre chose, le code cesse de fonctionner. Est-ce la même chose que ci-dessus, où la caméra passe tous les mouvements, mais le rappel onPictureTaken n'est jamais appelé. Lorsque les photos sont enregistrées dans le dossier DCIM, les photos prises ne s'affichent pas dans l'application Photos par défaut de mon téléphone, à moins que je ne redémarre le téléphone.
Existe-t-il un moyen par code pour désactiver le bruit de l'obturateur?
Désolé, le code est un peu compliqué parce que c'est une expérience.
En outre, ce code est exécuté dans un BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals(TAKE_PICTURE_INTENT))
{
Toast.makeText(context, "Test", Toast.LENGTH_LONG).show();
System.out.println("GOT THE INTENT");
try
{
Camera camera = Camera.open();
System.out.println("CAMERA OPENED");
Parameters params = camera.getParameters();
params.set("flash-mode", "off");
params.set("focus-mode", "infinity");
params.set("jpeg-quality", "100");
//params.setPictureSize(2592, 1952);
String str = params.get("picture-size" + "-values");
System.out.println(str);
String size = str.split(",")[0];
System.out.println(size);
//params.set("picture-size", size);
camera.setParameters(params);
System.out.println("CAMERA PARAMETERS SET");
camera.startPreview();
System.out.println("CAMERA PREVIEW STARTED");
camera.autoFocus(new AutoFocusCallBackImpl());
}
catch(Exception ex)
{
System.out.println("CAMERA FAIL, SKIP");
return ;
}
}//if
}//onreceive
private void TakePicture(Camera camera)
{
camera.takePicture(new Camera.ShutterCallback() {
@Override
public void onShutter() {
// TODO Auto-generated method stub
System.out.println("CAMERA SHUTTER CALLBACK");
}
}
, null,
new Camera.PictureCallback() {
public void onPictureTaken(byte[] imageData, Camera c) {
//c.release();
System.out.println("CAMERA CALLBACK");
FileOutputStream outStream = null;
try {
System.out.println("Start Callback");
File esd = Environment.getExternalStorageDirectory();
outStream = new FileOutputStream(esd.getAbsolutePath() + String.format(
"/DCIM/%d.jpg", System.currentTimeMillis()));
outStream.write(imageData);
outStream.close();
System.out.println("onPictureTaken - wrote bytes: " + imageData.length);
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("File not found exception");
} catch (IOException e) {
e.printStackTrace();
System.out.println("IO exception");
} finally {
System.out.println("Finally");
c.release();
}
}
}
);
//camera.release();
}//TAKE PICTURE
private class AutoFocusCallBackImpl implements Camera.AutoFocusCallback {
@Override
public void onAutoFocus(boolean success, Camera camera) {
//bIsAutoFocused = success; //update the flag used in onKeyDown()
System.out.println("Inside autofocus callback. autofocused="+success);
//play the autofocus sound
//MediaPlayer.create(CameraActivity.this, R.raw.auto_focus).start();
if(success)
{
System.out.println("AUTO FOCUS SUCCEDED");
}
else
{
System.out.println("AUTO FOCUS FAILED");
}
TakePicture(camera);
System.out.println("CALLED TAKE PICTURE");
}
}//AUTOFOCUSCALLBACK
Je vois ce que vous entendez sur le scanner des médias, je ne savais pas que cela existait. La raison pour laquelle c'est dans un récepteur de diffusion est que j'espérais créer quelque chose où je pourrais acquérir une image à travers le code quand je le devais. Je ne veux vraiment pas qu'une activité soit impliquée. – Kratz
Ok, je ne vois aucune activité dans BroadCastReceiver (Vérifier API Doc). –