android系统相机调用

poFate 2011-06-13 10:31:46
请问大侠,调用系统相机拍摄照片的时候,如何能连续拍摄一组照片,而不是点击确定之后就返回呢?
需要设置什么属性?
...全文
2648 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
安卓机器人 2011-12-01
  • 打赏
  • 举报
回复
好像调用系统相机没有类似的功能,只能一张一张的取图,1楼是对的,可以通过多线程,我以前做的一个项目也是使用每次拍照获取的图片,然后使用多线程上传图片
刍狗万物 2011-08-01
  • 打赏
  • 举报
回复
好东西~
yzy3353710 2011-07-11
  • 打赏
  • 举报
回复
学习学习
刍狗万物 2011-07-06
  • 打赏
  • 举报
回复
偶去试试
poFate 2011-06-13
  • 打赏
  • 举报
回复
看来只能像上面那样自己写一个相机Activity了
lingang1359 2011-06-13
  • 打赏
  • 举报
回复

public class MainActivity extends Activity {

//声明拍照界面组件
private SurfaceView surfaceView;
//声明界面控制组件
private SurfaceHolder surfaceHolder;
//声明照相机
private Camera camera;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//获取拍照界面组件
surfaceView = (SurfaceView)findViewById(R.id.preview);
//获取界面控制组件
surfaceHolder = surfaceView.getHolder();

//界面控制组件回调,处理打开相机,关闭相机及照片尺寸改变
Callback surfaceCallback = new Callback() {

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
//停止预览
camera.stopPreview();
//释放相机资源
camera.release();
camera = null;
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
//打开相机
camera = Camera.open();
try{
//设置预览
camera.setPreviewDisplay(holder);
}catch(Exception ex){
ex.printStackTrace();
}
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
//获得相机参数
Camera.Parameters params = camera.getParameters();
//设置照片大小
params.setPreviewSize(width, height);
//设置照片格式
params.setPictureFormat(PixelFormat.JPEG);
//设置相机参数
camera.setParameters(params);
//开始预览
camera.startPreview();
}
};


//为SurfaceHolder添加回调并设置类型
surfaceHolder.addCallback(surfaceCallback);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

class SavePictureTask extends AsyncTask<byte [],String,String>{

@Override
protected String doInBackground(byte[]... params) {
// TODO Auto-generated method stub
//创建文件
File picture = new File(Environment.getExternalStorageDirectory(),"picture.jpg");
//如果文件存在就删除掉
if(picture.exists()){
picture.delete();
}

try{
//获得文件输出流
FileOutputStream fos = new FileOutputStream(picture.getPath());
//写入文件
fos.write(params[0]);
//清空并关闭文件流
fos.flush();
fos.close();
}catch(Exception ex){
ex.printStackTrace();
}
return null;
}

}

//照片回调,执行保存照片任务并回到预览界面
Camera.PictureCallback pictureCallback = new PictureCallback() {

@Override
public void onPictureTaken(byte[] data, Camera camera) {
// TODO Auto-generated method stub
new SavePictureTask().execute(data);
camera.startPreview();
}
};

//拍照方法
private void takePic(){
//停止预览
camera.stopPreview();
//拍照
camera.takePicture(null, null, pictureCallback);
}

//响应拍照按键事件
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_CAMERA || keyCode == KeyEvent.KEYCODE_SEARCH){
takePic();
return true;
}
return super.onKeyDown(keyCode, event);
}


划红线的代码用线程管理,多执行几次就行了,黄色代码注释掉就不会停止预览了

80,348

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧