我写了下面的代码,它编译得很好,但问题是它没有拍任何照片。我已经按照 android 文档的指示在清单文件中添加了权限和功能,但由于某种原因,该应用程序仍然没有拍照。I am not getting any errors in logcat either.
这是代码。
public class StartingPoint extends Activity implements SurfaceHolder.Callback{
Camera cam;
Parameters param;
Bitmap imageTaken;
ImageView imView;
SurfaceView dummySurfaceView;
SurfaceHolder dummyHolder;
CamCallBack camCall ;
private static final String TAG = "CameraApp";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_starting_point);
imView = (ImageView) findViewById(R.id.imageView);
dummySurfaceView = (SurfaceView) findViewById(R.id.dummySurface);
dummyHolder= dummySurfaceView.getHolder();
dummyHolder.addCallback(StartingPoint.this);
dummyHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
param= cam.getParameters();
cam.setParameters(param);
cam.startPreview();
cam.takePicture(null, null, camCall);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try
{
if(cam.getNumberOfCameras()==2)
{
cam.open(0);
cam.setPreviewDisplay(dummySurfaceView.getHolder());
camCall = new CamCallBack();
Log.d(TAG,"Try to open camera");
}
}
catch(Exception e)
{
e.printStackTrace();
Log.d(TAG,"camera opening failed");
Log.e(TAG,"recieved Exception",e);
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
cam.stopPreview();
cam.release();
cam=null;
}
public class CamCallBack implements Camera.PictureCallback
{
@Override
public void onPictureTaken(byte[] data, Camera camera) {
imageTaken = BitmapFactory.decodeByteArray(data, 0, data.length);
imView.setImageBitmap(imageTaken);
cam.release();
Log.d(TAG,"Picture taken");
}
}
}
我究竟做错了什么?有什么我想念的吗?
编辑:
我知道我可以使用它来拍照,Camera activity
但这在我的应用程序中不是必需的,所以我没有使用它。
更新:
代码已更新。我在布局中添加了一个 0dp 高度和宽度的虚拟 Surfaceview,但该应用程序仍然无法正常工作。
我们可以在不让用户知道照片已经拍摄的情况下从服务中拍摄照片吗?
问候