android 相机故障 代码 解决,android – 如何在调用Camera时解决ANR错误?

我在主菜单中有两个按钮.我按下第一个按钮时调用相机.在这里,我没有遇到任何问题.相机正常工作.拍完照片后,我回到主菜单,再次按下第一个按钮.我在这里得到了这个问题.相机正确调用.但是当我拍照时,我得到了ANR错误(原因:keyDispatchingTimedOut).如何解决这个问题?

编辑::

我正在使用以下代码,

按钮监听器,

Button imageButton = (Button) findViewById(R.id.button1);

imageButton.setOnClickListener(new View.OnClickListener() {

public void onClick(View arg0) {

Intent intent = new Intent();

intent.setClass(activity, ImageActivity.class);

startActivity(intent);

}

});

ImageActivity.java

public class ImageActivity extends Activity implements SurfaceHolder.Callback {

private Camera camera = null;

private SurfaceHolder surfaceHolder = null;

private boolean previewRunning = false;

private Button btnDone, btnCapture, btnRetake;

private Bitmap mBitmap;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

getWindow().setFormat(PixelFormat.TRANSLUCENT);

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.surface_screen);

SurfaceView surfaceView = (SurfaceView) findViewById(R.id.camerapreview);

surfaceHolder = surfaceView.getHolder();

surfaceHolder.addCallback(this);

surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

surfaceHolder.setFixedSize(getWindow().getWindowManager()

.getDefaultDisplay().getWidth(), getWindow().getWindowManager()

.getDefaultDisplay().getHeight());

LayoutInflater controlInflater = LayoutInflater.from(getBaseContext());

final View viewControl = controlInflater.inflate(R.layout.control, null);

LayoutParams layoutParamsControl = new LayoutParams(

LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

activity.addContentView(viewControl, layoutParamsControl);

btnCapture = (Button) findViewById(R.id.takepicture);

btnDone = (Button) findViewById(R.id.send);

btnCapture.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

camera.takePicture(null, picCalBac, picCalBac);

}

});

Camera.PictureCallback picCalBac = new PictureCallback() {

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

if (data != null) {

mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

}

}

};

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

if (previewRunning) {

camera.stopPreview();

}

try {

camera.setPreviewDisplay(surfaceHolder);

} catch (IOException e) {

Log.d("IOException", e.getMessage());

}

camera.startPreview();

previewRunning = true;

}

public void surfaceCreated(SurfaceHolder arg0) {

camera = Camera.open(0);

}

public void surfaceDestroyed(SurfaceHolder arg0) {

camera.stopPreview();

previewRunning = false;

camera.release();

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值