Вылеты при нескольких нажатиях

Рейтинг: 1Ответов: 1Опубликовано: 26.03.2015

Пишу приложение по типу обычной камеры. Как сделать что-то похожее на лямбда-замыкания, чтобы при захвате при нескольких нажатиях не вылетала аппликуха?

ButtonCapture.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    camera.takePicture(null, null, new Camera.PictureCallback() {
                        @Override
                        public void onPictureTaken(byte[] data, Camera camera) {
                            camera.startPreview();
                            int angleToRotate = getRotationAngle();
                            angleToRotate = angleToRotate;
                            try {
                                 Bitmap originalImage = BitmapFactory.decodeByteArray(data, 0, data.length);
                                Bitmap bitmapImage = rotate(originalImage, angleToRotate);
                                String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
                                MediaStore.Images.Media.insertImage(getContentResolver(),bitmapImage,"iblzr_"+timeStamp ,"yourDescription" );

                            } catch (Exception e) {
                                Log.e("TAG",e.toString());
                            }
                        }
                    });
                }
            });

Ответы

▲ 2Принят

Похоже, что у вас при повторном нажатии на кнопку вызывается camera.takePicture() до того, как завершился camera.takePicture(), вызванный при первом нажатии.

Поставьте view.setEnabled(false); перед вызовом takePicture(), а затем view.setEnabled(true); в onPictureTaken(). Ну то есть отключите кнопку на время выполнения этого вызова либо добавьте свои проверки, чтобы такого повторного вызова не было.