我已经构建了一个应用程序,可以在您触摸预览时拍摄照片。 我可以拍很多照片,但有时当我触摸预览拍照时,没有快门声,整个应用程序冻结。此外,在此之后,如果我尝试启动内置相机应用程序,我会收到相机无法使用的消息。Android相机 - 有时当我拍照时,应用程序冻结,相机不可用

我不知道这种行为的原因,它随机发生,当它发生时,我必须重新启动设备(三星Galaxy S)才能够再次使用相机。

在DDM,碰撞后,可看到下面的行:keyDispatchingTimedOut

下面是相关的代码: CameraActivity类别:

public class CameraActivity extends Activity {

private static final String TAG = "CameraDemo";

Preview preview;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

preview = new Preview(this);

((FrameLayout) findViewById(R.id.preview)).addView(preview);

((FrameLayout) findViewById(R.id.preview)).setOnTouchListener(preview);

Log.d(TAG, "Camera Activity Created.");

}

}

预览类别:

class Preview extends SurfaceView implements SurfaceHolder.Callback, OnTouchListener {

private static final String TAG = "Preview";

SurfaceHolder mHolder;

public Camera camera;

Context ctx;

boolean previewing = false;

Preview(Context context) {

super(context);

ctx = context;

// Install a SurfaceHolder.Callback so we get notified when the

// underlying surface is created and destroyed.

mHolder = getHolder();

mHolder.addCallback(this);

mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

}

// Called once the holder is ready

public void surfaceCreated(SurfaceHolder holder) {

// The Surface has been created, acquire the camera and tell it where

// to draw.

camera = Camera.open();

}

// Called when the holder is destroyed

public void surfaceDestroyed(SurfaceHolder holder) {

if (camera != null) {

camera.setPreviewCallback(null);

camera.stopPreview();

camera.release();

camera = null;

}

previewing = false;

}

// Called when holder has changed

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {

if(previewing){

camera.stopPreview();

previewing = false;

}

if (camera != null){

try {

camera.setDisplayOrientation(90);

camera.setPreviewDisplay(holder);

camera.setPreviewCallback(new PreviewCallback() {

// Called for each frame previewed

public void onPreviewFrame(byte[] data, Camera camera) {

Log.d(TAG, "onPreviewFrame called at: " + System.currentTimeMillis());

Preview.this.invalidate();

}

});

camera.startPreview();

previewing = true;

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

public boolean onTouch(View v, MotionEvent event) {

camera.takePicture(shutterCallback, rawCallback, jpegCallback);

return false;

}

// Called when shutter is opened

ShutterCallback shutterCallback = new ShutterCallback() {

public void onShutter() {

Log.d(TAG, "onShutter'd");

}

};

// Handles data for raw picture

PictureCallback rawCallback = new PictureCallback() {

public void onPictureTaken(byte[] data, Camera camera) {

Log.d(TAG, "onPictureTaken - raw");

}

};

// Handles data for jpeg picture

PictureCallback jpegCallback = new PictureCallback() {

public void onPictureTaken(byte[] data, Camera camera) {

FileOutputStream outStream = null;

try {

// Write to SD Card

outStream = new FileOutputStream(String.format("/sdcard/TVguide/Detection/detected.jpg", System.currentTimeMillis())); // <9>

outStream.write(data);

outStream.close();

Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length);

} catch (FileNotFoundException e) { // <10>

//Toast.makeText(ctx, "Exception #2", Toast.LENGTH_LONG).show();

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {}

Log.d(TAG, "onPictureTaken - jpeg");

Toast.makeText(ctx, "SAVED", Toast.LENGTH_SHORT).show();

camera.startPreview();

}

};

}

请帮忙,我想了解几天没有成功的问题

的Eyal

2012-03-12

Eyal

+0

有人吗?我真的坚持 –

2012-03-14 20:52:10

+0

也我建议将图片保存到SD卡后台线程,而不是主要的UI线程。 –

2013-05-14 17:08:09

android有程序占用相机,Android相机 - 有时当我拍照时,应用程序冻结,相机不可用...相关推荐

  1. CMD 命令行查看端口被哪个程序占用,并根据PID值,找到相应的程序,关闭掉对应服务或进程!...

    CMD 命令行查看端口被哪个程序占用,并根据PID值,找到相应的程序,关闭掉对应服务或进程! 不用任何第三方软件的情况下,打开CMD执行如下命令:1,netstat -ano 你可以查看到Local ...

  2. 那些年,我们在Android机型适配上遇到的坑丨之Camera拍照时快门咔嚓声

    文/腾讯优测研发工程师 吴宇焕 现在Android手机一般都会带有照相功能,有很多朋友就发现手机照相时快门声音很响,想关又关不掉.....不过话说回来,静音拍照你想做啥? 来到主题上,因为网络上有很多 ...

  3. android8.1 相机(SnapdragonCamera)长按拍照时关闭闪光灯

    我们公司用的是高通sdm660平台,oppo等大厂长按相机拍照时,即使闪光灯打开也不会亮,从SnapdragonCamera里面通过设置parameters = camera.getParameter ...

  4. php微信照相机,用微信拍照时怎么打开原生相机?(Android)| 有轻功

    在日常的微信聊天中,我们经常会给朋友分享即兴拍摄的照片.出于方便,很多时候我们会直接用微信来拍照,但用微信自带的相机拍出来的照片,效果其实并不理想. 上为手机原生相机拍摄,下为微信相机拍摄 特别是在光 ...

  5. Java占Linux超过xms,linux下分析java程序占用CPU、内存过高

    一.CPU过高分析 1)使用TOP命令查看CPU.内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比.其中CPU状态中标示id的为空闲 ...

  6. linux进程莫名其妙被kill,Linux运行程序时,程序进程莫名退出(被杀死)

    Linux运行程序时,程序进程莫名退出(被杀死) 1.知识点 1)Linux程序进程被杀,日志突然中止,可以考虑是否因为程序占用内存过高,导致系统内存不足,为避免系统崩溃,系统寻找内存占用最大的进程k ...

  7. android相机采集sdk,C#用basler相机sdk采集图像并用halcon显示的小程序

    C#用basler相机sdk采集图像并用halcon显示的小程序 C#用basler相机sdk采集图像并用halcon显示的小程序 本人在用halcon做图像处理做视觉项目时,通常都是用c#写程序的主 ...

  8. android系统相机的使用、及解决拍照闪退的问题

    http://blog.csdn.net/lang791534167/article/details/39647263 相机已成为Android手机不可或缺的一部分,我们在开发可能也会涉及到关于相机的 ...

  9. Android通知怎么实现?Android开发如何操作相机和相册?

    Android通知怎么实现?Android开发如何操作相机和相册? 前言 八.Android通知怎么实现?Android开发如何操作相机和相册? 8.1 通知介绍 8.2 通知的基本用法 8.3 An ...

最新文章

  1. python进程执行带有参数的任务(args、kwargs)
  2. Upgrading PHP on CentOS 6.5 (Final)
  3. 共谋大数据产业发展新篇章
  4. rose 2003 7.0_安卓微信7.0.17正式版更新:十大新鲜功能~
  5. Redhat7.2上编译Linux内核源码
  6. mysql提取数字_Mysql中实现提取字符串中的数字的自定义函数分享
  7. 携手Visa IBM Watson IoT加速互联设备转化为潜在销售点
  8. SQL Error (1130): Host IP is not allowed to connect to this MySQL server
  9. Light OJ 1007
  10. Java类class cast()方法及示例
  11. 无监督学习 | PCA 主成分分析之客户分类
  12. 三星宣布华大九天成为其晶圆代工生态系统SAFE EDA合作伙伴
  13. 设备的开发【WP7学习札记之五】
  14. 太秀了!单片机内置 ADC 实现高分辨率采样?
  15. 关于如何提高代码可测试性的一些看法
  16. Qt 中利用 GNU barcode 生成一维条形码
  17. 继电器和蜂鸣器的使用
  18. 现成轮子OSAL操作系统抽象层的移植
  19. css超链接样式+雪碧图实现导航
  20. 微信小程序里面的标签和html标签的对比、微信小程序基础之常用控件

热门文章

  1. 荣耀x10和红米k30至尊版哪个好
  2. 汉中电大计算机应用基础试题及答案,电大网考计算机应用基础统考试题(00001).doc...
  3. CsvReader和CsvWriter操作csv文件
  4. 父亲和女儿,成为同一所高校的新生!
  5. 近70套电商详情设计模板合集,店铺装修能省不少
  6. 测桃花运(算姻缘)的网站系统源码
  7. 重新学习--中国菜刀
  8. 使用pg_hint_plan固定Postgresql执行计划
  9. S域离散化过程中的替代公式
  10. java 项目英语面试问题_Java 英文面试题