我已经编写了以下代码,它编译得很好,但问题是它没有拍任何图片。我已根据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
拍照,但我的应用不需要这样做,所以我没有使用它。
的更新: 的
代码已更新。我在布局中添加了一个虚拟Surfaceview,其高度和宽度为0dp,但仍然无法使用该应用程序。
我们可以在不让用户知道已拍摄照片的情况下从服务中拍摄照片吗?
此致
答案 0 :(得分:0)
我认为您可以使用Intent轻松尝试:
// at the beginning of your class
private static final int CAMERA_REQUEST = 1888;
//call cam request
public void takePic(){
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
}
//get photo taken
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CAMERA_REQUEST){
ImageView photo = (ImageView) findViewById(R.id.yourpic);
Bitmap photoprise = (Bitmap) data.getExtras().get("data");
photo.setImageBitmap(photoprise);
}
}
希望这个帮助
答案 1 :(得分:0)
我知道我可以使用相机活动拍照,但我的应用不需要这样,所以我没有使用它。
在这种情况下,使用基于Intent
的解决方案是一个好主意。
我有什么遗失的吗?
Camera.Parameters
Camera.Parameters
我做错了什么?
除上述情况外,您打开Camera
两次,忽略第二个 - 您可能要删除cam.open(0)
。