У меня есть код, который я экспериментировал, чтобы посмотреть, что я могу сделать с устройством камеры. Этот следующий код работает, но у меня есть некоторые проблемы с ним, которые я не могу решить.Проблема с камерой Android
Первый звонок никогда не работает. При первом запуске кода обратный вызов onPictureTaken никогда не вызывается, поэтому файл никогда не записывается. Тем не менее камера проходит все остальные шаги, в том числе создает поддельные шумы затвора.
Я не могу установить размер изображения на что-то другое, чем оно по умолчанию. Если я попытаюсь установить его на что-то еще, код перестанет работать. Делает то же, что и выше, когда камера проходит все движения, но обратный вызов onPictureTaken никогда не вызывается.
Когда фотографии сохраняются в папке DCIM, снятые снимки не отображаются в приложении «Фотографии» по умолчанию на моем телефоне, если только я не перезагружаю телефон.
Есть ли какой-либо способ посредством кода, чтобы отключить шум затвора?
Извините, код немного грязный, потому что его эксперимент.
Кроме того, этот код выполняется в 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
Я понимаю, что вы имеете в виду о сканере СМИ, я не знал, что это было. Причина в широковещательном приемнике заключается в том, что я надеялся создать что-то, где я мог бы получить изображение через код всякий раз, когда мне было нужно. Я действительно не хочу, чтобы там была какая-то деятельность. – Kratz 2010-12-03 06:08:40