我试图从相机中获取照片。在后台使用相机Android
@Override
public void onCreate() {
super.onCreate();
//android.os.Debug.waitForDebugger();
myCamera=Camera.open();
SurfaceView dummy=new SurfaceView(getApplicationContext());
try {
if(myCamera!=null)
{
myCamera.setPreviewDisplay(dummy.getHolder());
myCamera.setPreviewCallback(this);
Log.i(TAG,"myCamera is not null");
}
getFrames();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.e(TAG, "setPreviewDisplay " + e);
}
myCamera.startPreview();
}
public void getFrames() {
new Thread(new Runnable() {
public void run() {
while(flag)
{
Log.i(TAG, "getFrames");
try{
//method();
takePictureNoPreview();
Thread.sleep(54);
} catch (Exception e) {
Log.e(TAG, "getFrames thread error: " + e);
}
}
myCamera.release();
}
}).start();
}
public void takePictureNoPreview(){
try{
Log.i(TAG,"takePictureNoPreview");
myCamera.takePicture(null, null, getJpegCallback())
} catch (Exception e) {
Log.e(TAG, "takePictureNoPreview " + e);
}
private PictureCallback getJpegCallback(){
PictureCallback jpeg=new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
try {
Log.i(TAG,"getJpegCallback");
FileOutputStream(String.format("/sdcard/RealSpeaker/%d.jpg", System.currentTimeMillis()));
FileOutputStream os = new FileOutputStream(String.format("/sdcard/Sample/%d.jpg", System.currentTimeMillis()));
os.write(data);
os.close();
} catch (IOException e) {
//do something about it
}
}
};
return jpeg;
}
的问题是,该方法getJpegCallback周围是不正确的:(文件夹中没有日志和图片)Ю 当我调试应用程序,TAG - getJpegCallback不logcat中显示,但TAG takePictureNoPreview显示。关闭应用程序后,相机不允许(现在没有问题)。怎么了?
我所经历的是我需要一个布局中的实际SurfaceView来拍照,所以我添加了一个SurfaceView,高度= 20dp,marginTop = -100dp或某物“将其移出视线”但它仍然存在于布局中。也许你应该尝试这样的事情。另一个想法是:你不应该在回调的surfaceCreated/Changed方法中调用setPreviewDisplay和startPreview? – damian
好的。我尝试第一个变体 – user1755546
您是否尝试在背景中录制视频 –