Android-камера Nexus 4 takePicture не выполняет обратный вызов onPictureTaken

У меня есть класс (CameraView), который я использую для съемки в своем приложении.

При работе на LG Nexus 4 (Android 4.2.1) нет обратного вызова onPictureTaken. Ниже приведен базовый пример того, как я пытаюсь добиться этого (я отключил все элементы инициализации, но это действительно происходит). Этот код работает и делает снимки на Galaxy Nexus (Android 4.2.1) и Galaxy S3 (Android 4.0.3), но не на Nexus 4. Я тестировал обратный вызов onShutter() и все onPictureTaken(), raw, postview и jpeg, но ни один из них не вызывается при работе на Nexus 4.

ИЗМЕНИТЬ:

В моем первом действии у меня есть кнопка, которая запускает камеру.

mImage = (Button) findViewById(R.id.takeimg);
mImage.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        startActivityForResult(new Intent(MyClass.this, CameraView.class), ACTION_ACTIVITY_PHOTO);
    }
});

В моей деятельности камеры у меня есть следующее:

public class CameraView extends Activity implements PictureCallback{
    private Camera mCamera;
    private ImageButton mShutterBtn;

    public void onCreate(Bundle savedInstanceState) {
        mCamera = Camera.open();
        mShutterBtn = (ImageButton) findViewById(R.id.shutter);
        mShutterBtn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                mShutterBtn.setImageResource(R.drawable.shutter_pressed);
                close_shutter();
            }
        });
    }

    protected void onResume() {
        mCamera.startPreview();
    }

    private void close_shutter(){
        mCamera.takePicture(null, null, this);
    }

    public void onPictureTaken(byte[] data, Camera camera) {
        //save image...
        setResult(RESULT_OK);
        finish()
    }
}

Ниже приведен подробный журнал LogCat о том, что происходит с момента начала действия, до попытки сделать изображение и затем завершить действие. Я не вижу в нем ничего, что указывало бы на проблему с моим кодом. Любая помощь будет оценена.

01-29 12:44:39.997: W/CameraView(10936): onCreate
01-29 12:44:40.157: I/AwesomePlayer(165): setDataSource_l(URL suppressed)
01-29 12:44:40.197: I/AwesomePlayer(165): setDataSource_l(URL suppressed)
01-29 12:44:40.237: I/CameraClient(165): Opening camera 0
01-29 12:44:40.277: E/qcom_sensors_hal(590): hal_process_report_ind: Bad item quality: 11 
01-29 12:44:40.307: E/mm-camera(195): sensor_load_chromatix: libchromatix_imx111_preview.so: 30
01-29 12:44:40.337: E/qcom_sensors_hal(590): hal_process_report_ind: Bad item quality: 11 
01-29 12:44:40.418: E/mm-camera(195): vfe_ops_init: E
01-29 12:44:40.418: E/mm-camera(195): vfe_legacy_stats_buffer_init: AEC_STATS_BUFNUM
01-29 12:44:40.418: E/mm-camera(195): vfe_legacy_stats_buffer_init: AEC_STATS_BUFNUM
01-29 12:44:40.428: E/mm-camera(195): mctl_init_stats_proc_info: snap_max_line_cnt =30096
01-29 12:44:40.558: W/CameraView(10936): onResume
01-29 12:44:40.588: I/Choreographer(10936): Skipped 35 frames!  The application may be doing too much work on its main thread.
01-29 12:44:40.738: E/QCameraHWI(165): android::status_t android::QCameraHardwareInterface::setPreviewWindow(preview_stream_ops_t*): mPreviewWindow = 0x0x4004bc38, mStreamDisplay = 0x0x40132008
01-29 12:44:40.738: D/QCameraHWI(165): android::status_t android::QCameraHardwareInterface::startPreview():  start preview now
01-29 12:44:40.738: I/QCameraHWI(165): android::status_t android::QCameraHardwareInterface::startPreview2():Setting ZSL mode
01-29 12:44:40.748: E/mm-camera(195): config_proc_CAMERA_SET_INFORM_STARTPREVIEW
01-29 12:44:40.748: E/mm-camera(195): config_proc_CAMERA_SET_INFORM_STARTPREVIEW : AF_SET_INFORM_STARTPREVIEW!
01-29 12:44:40.748: E/mm-camera(195): config_update_stream_info Storing stream parameters for video inst 1 as : width = 640, height 480, format = 1 inst_handle = 810081 cid = 0
01-29 12:44:40.768: E/mm-camera(195): config_update_stream_info Storing stream parameters for video inst 3 as : width = 640, height 480, format = 1 inst_handle = 830083 cid = 0
01-29 12:44:40.768: E/mm-camera(195): config_update_stream_info Storing stream parameters for video inst 4 as : width = 512, height 384, format = 1 inst_handle = 840084 cid = 0
01-29 12:44:40.778: E/mm-camera(195): config_decide_vfe_outputs: Ports Used 3, Op mode 1
01-29 12:44:40.778: E/mm-camera(195): config_decide_vfe_outputs Current mode 0 Full size streaming : Disabled
01-29 12:44:40.778: E/mm-camera(195): config_decide_vfe_outputs: Primary: 640x480, extra_pad: 0x0, Fmt: 1, Type: 1, Path: 1
01-29 12:44:40.778: E/mm-camera(195): config_decide_vfe_outputs: Secondary: 640x480, extra_pad: 0x0, Fmt: 1, Type: 3, Path: 4
01-29 12:44:40.778: E/mm-camera(195): config_update_inst_handles Updated the inst handles as 810081, 830083, 0, 0 
01-29 12:44:40.918: E/mm-camera(195): sensor_load_chromatix: libchromatix_imx111_zsl.so: 26
01-29 12:44:41.008: E/mm-camera(195): camif_client_set_params: camif has associated with obj mask 0x1
01-29 12:44:41.008: E/mm-camera(195): config_v2_CAMERA_START_common CAMIF_PARAMS_ADD_OBJ_ID failed -1 
01-29 12:44:41.008: E/mm-camera(195): vfe_operation_config: format 3
01-29 12:44:41.008: E/mm-camera(195): vfe_operation_config:vfe_op_mode=5
01-29 12:44:41.008: E/mm-camera(195): Invalid ASD Set Params Type
01-29 12:44:41.008: E/mm-camera(195): vfe_set_bestshot: Bestshot mode not changed
01-29 12:44:41.038: E/mm-libcamera2(165): PROFILE HAL: stopPreview(): E: 1359463481.041744933
01-29 12:44:41.038: E/mm-camera(195): config_MSG_ID_STOP_ACK: streamon_mask is not clear. Should not call PP_Release_HW
01-29 12:44:41.148: E/mm-camera(195): config_proc_CAMERA_SET_PARM_AF_MODE Unlock CAF
01-29 12:44:41.148: E/QCameraHWI(165): android::status_t android::QCameraHardwareInterface::setPreviewWindow(preview_stream_ops_t*): mPreviewWindow = 0x0x4004bc38, mStreamDisplay = 0x0x40132008
01-29 12:44:41.158: D/QCameraHWI(165): android::status_t android::QCameraHardwareInterface::startPreview():  start preview now
01-29 12:44:41.158: I/QCameraHWI(165): android::status_t android::QCameraHardwareInterface::startPreview2():Setting ZSL mode
01-29 12:44:41.158: E/mm-camera(195): config_proc_CAMERA_SET_INFORM_STARTPREVIEW
01-29 12:44:41.158: E/mm-camera(195): config_proc_CAMERA_SET_INFORM_STARTPREVIEW : AF_SET_INFORM_STARTPREVIEW!
01-29 12:44:41.158: E/mm-camera(195): config_update_stream_info Storing stream parameters for video inst 1 as : width = 768, height 432, format = 1 inst_handle = 810081 cid = 0
01-29 12:44:41.168: E/mm-camera(195): config_update_stream_info Storing stream parameters for video inst 3 as : width = 640, height 480, format = 1 inst_handle = 830083 cid = 0
01-29 12:44:41.168: E/mm-camera(195): config_update_stream_info Storing stream parameters for video inst 4 as : width = 512, height 384, format = 1 inst_handle = 840084 cid = 0
01-29 12:44:41.178: E/mm-camera(195): config_decide_vfe_outputs: Ports Used 3, Op mode 1
01-29 12:44:41.178: E/mm-camera(195): config_decide_vfe_outputs Current mode 5 Full size streaming : Disabled
01-29 12:44:41.178: E/mm-camera(195): config_decide_vfe_outputs: Primary: 768x432, extra_pad: 0x0, Fmt: 1, Type: 1, Path: 1
01-29 12:44:41.178: E/mm-camera(195): config_decide_vfe_outputs: Secondary: 640x480, extra_pad: 0x0, Fmt: 1, Type: 3, Path: 4
01-29 12:44:41.178: E/mm-camera(195): config_update_inst_handles Updated the inst handles as 810081, 830083, 0, 0 
01-29 12:44:41.178: E/mm-camera(195): camif_client_set_params: camif has associated with obj mask 0x1
01-29 12:44:41.178: E/mm-camera(195): config_v2_CAMERA_START_common CAMIF_PARAMS_ADD_OBJ_ID failed -1 
01-29 12:44:41.178: E/mm-camera(195): vfe_operation_config: format 3
01-29 12:44:41.178: E/mm-camera(195): vfe_operation_config:vfe_op_mode=5
01-29 12:44:41.228: I/Choreographer(10936): Skipped 33 frames!  The application may be doing too much work on its main thread.
01-29 12:44:41.248: E/mm-libcamera2(165): PROFILE HAL: First preview frame received: 1359463481.257401883
01-29 12:44:41.248: E/BufferQueue(162): [SurfaceView] dequeueBuffer: min undequeued buffer count (2) exceeded (dequeued=6 undequeudCount=0)
01-29 12:44:41.328: I/ActivityManager(590): Displayed uk.co.appogee.cfh_rds/.deliver.CameraView: +1s369ms
01-29 12:44:41.338: E/BufferQueue(162): [SurfaceView] dequeueBuffer: min undequeued buffer count (2) exceeded (dequeued=5 undequeudCount=1)
01-29 12:44:41.359: D/overlay(162): FROM_STATE = OV_BYPASS_3_LAYER TO_STATE = OV_CLOSED
01-29 12:44:41.629: D/overlay(162): FROM_STATE = OV_CLOSED TO_STATE = OV_2D_VIDEO_ON_PANEL
01-29 12:44:42.169: D/dalvikvm(10936): GC_EXPLICIT freed 563K, 22% free 11467K/14680K, paused 3ms+5ms, total 44ms
01-29 12:44:42.480: E/mm-camera(195): PROFILE set_parm_AF: : 1359463482.482367550
01-29 12:44:42.480: E/mm-camera(195): af_lg_caf_status 7, af_lg_caf_fv_status 0, first_af 0
01-29 12:44:42.480: E/mm-camera(195): NO ADDITIONAL af HERE!
01-29 12:44:43.060: D/dalvikvm(590): GC_EXPLICIT freed 842K, 31% free 25749K/37136K, paused 5ms+10ms, total 101ms
01-29 12:44:43.190: E/mm-camera(195): config_proc_CAMERA_SET_LG_CAF_LOCK : TAKE PICTURE!
01-29 12:44:43.271: E/mm-libcamera2(165): mm_camera_dispatch_buffered_frames: mframe 0x0, sframe = 0x0
01-29 12:44:43.871: D/dalvikvm(10936): GC_EXPLICIT freed 367K, 22% free 11534K/14680K, paused 3ms+5ms, total 37ms
01-29 12:44:44.722: D/dalvikvm(590): GC_EXPLICIT freed 437K, 31% free 25740K/37136K, paused 3ms+9ms, total 98ms
01-29 12:44:45.623: D/alsa_ucm(165): snd_use_case_set(): uc_mgr 0x41fa22a0 identifier _verb value Inactive
01-29 12:44:45.623: D/alsa_ucm(165): Set mixer controls for HiFi Lowlatency enable 0
01-29 12:44:45.623: D/alsa_ucm(165): snd_use_case_set(): uc_mgr 0x41fa22a0 identifier _disdev value Speaker
01-29 12:44:45.623: D/alsa_ucm(165): Set mixer controls for Speaker enable 0
01-29 12:44:45.653: I/wpa_supplicant(765): wlan0: Authentication with 00:04:96:2a:7a:59 timed out.
01-29 12:44:45.693: D/dalvikvm(10936): GC_EXPLICIT freed 366K, 22% free 11536K/14680K, paused 7ms+11ms, total 77ms
01-29 12:44:45.983: W/ActivityManager(590): Activity idle timeout for ActivityRecord{42aab158 u0 uk.co.appogee.cfh_rds/.deliver.Deliver}
01-29 12:44:46.594: D/dalvikvm(590): GC_EXPLICIT freed 433K, 31% free 25737K/37136K, paused 6ms+10ms, total 108ms
01-29 12:44:47.275: I/wpa_supplicant(765): wlan0: Trying to associate with 00:04:96:2a:7a:2a (SSID='APPOGEE' freq=2432 MHz)
01-29 12:44:47.355: I/wpa_supplicant(765): wlan0: CTRL-EVENT-ASSOC-REJECT bssid=00:04:96:2a:7a:2a status_code=1
01-29 12:44:47.375: D/dalvikvm(982): GC_CONCURRENT freed 366K, 6% free 9695K/10256K, paused 5ms+3ms, total 34ms
01-29 12:44:47.665: D/dalvikvm(10936): GC_EXPLICIT freed 369K, 22% free 11539K/14680K, paused 2ms+7ms, total 51ms
01-29 12:44:48.466: D/dalvikvm(590): GC_EXPLICIT freed 491K, 31% free 25734K/37136K, paused 3ms+11ms, total 93ms
01-29 12:44:48.726: D/AudioStreamOutALSA(165): mHandle->useCase: HiFi Lowlatency
01-29 12:44:48.726: D/ALSAModule(165): s_route: devices 0x2 in mode 0
01-29 12:44:48.726: D/ALSAModule(165): switchDevice: device 2 mode:0
01-29 12:44:48.726: D/ALSAModule(165): No valid input device: 0
01-29 12:44:48.726: D/ALSAModule(165): switchDevice,rxDev:Speaker, txDev:(null), curRxDev:Speaker, curTxDev:None
01-29 12:44:48.726: D/alsa_ucm(165): snd_use_case_set(): uc_mgr 0x41fa22a0 identifier _enadev value Speaker
01-29 12:44:48.726: D/ALSAModule(165): switchDevice: curTxUCMDevivce None curRxDevDevice Speaker
01-29 12:44:48.726: D/alsa_ucm(165): snd_use_case_set(): uc_mgr 0x41fa22a0 identifier _verb value HiFi Lowlatency
01-29 12:44:48.726: D/alsa_ucm(165): Set mixer controls for Speaker enable 1
01-29 12:44:48.726: D/ACDB-LOADER(165): ACDB -> send_afe_cal
01-29 12:44:48.726: D/alsa_ucm(165): Set mixer controls for HiFi Lowlatency enable 1
01-29 12:44:48.726: D/ALSAModule(165): Device value returned is hw:0,14
01-29 12:44:48.736: D/ALSAModule(165): setHardwareParams: reqBuffSize 1024 channels 2 sampleRate 48000
01-29 12:44:48.736: D/ALSAModule(165): setHardwareParams: buffer_size 2048, period_size 1024, period_cnt 2
01-29 12:44:48.766: W/CameraView(10936): onPause
01-29 12:44:48.766: E/mm-libcamera2(165): PROFILE HAL: stopPreview(): E: 1359463488.771425995
01-29 12:44:48.766: E/mm-camera(195): config_MSG_ID_STOP_ACK: streamon_mask is not clear. Should not call PP_Release_HW
01-29 12:44:48.766: E/mm-libcamera2(165): PROFILE HAL: stopPreview(): E: 1359463488.778537241
01-29 12:44:48.766: E/QCameraHWI(165): android::status_t android::QCameraHardwareInterface::setPreviewWindow(preview_stream_ops_t*):Received Setting NULL preview window
01-29 12:44:48.766: E/QCameraHWI(165): android::status_t android::QCameraHardwareInterface::setPreviewWindow(preview_stream_ops_t*): mPreviewWindow = 0x0x0, mStreamDisplay = 0x0x40132008
01-29 12:44:48.766: W/QCameraHWI_Preview(165):  Setting NULL preview window 
01-29 12:44:48.776: I/CameraClient(165): Destroying camera 0
01-29 12:44:48.776: E/mm-camera(195): config_shutdown_pp Camera not in streaming mode. Returning. 
01-29 12:44:48.776: E/mm-camera(195): vfe_ops_deinit: E
01-29 12:44:48.796: E/qcom_sensors_hal(590): hal_process_report_ind: Bad item quality: 11 
01-29 12:44:48.846: W/AudioFlinger(165): session id 160 not found for pid 165
01-29 12:44:48.846: W/AudioFlinger(165): session id 161 not found for pid 165
01-29 12:44:48.857: E/qcom_sensors_hal(590): hal_process_report_ind: Bad item quality: 11 
01-29 12:44:49.087: D/overlay(162): FROM_STATE = OV_2D_VIDEO_ON_PANEL TO_STATE = OV_CLOSED
01-29 12:44:49.347: D/overlay(162): FROM_STATE = OV_CLOSED TO_STATE = OV_BYPASS_3_LAYER
01-29 12:44:49.948: W/ActivityManager(590): Launch timeout has expired, giving up wake lock!
01-29 12:44:49.958: W/ActivityManager(590): Activity idle timeout for ActivityRecord{42a30e78 u0 uk.co.appogee.cfh_rds/.deliver.CameraView}
01-29 12:44:50.118: D/dalvikvm(10936): GC_EXPLICIT freed 372K, 22% free 11548K/14680K, paused 2ms+6ms, total 41ms
01-29 12:44:50.859: D/dalvikvm(590): GC_EXPLICIT freed 835K, 31% free 25730K/37136K, paused 5ms+10ms, total 118ms
01-29 12:44:51.209: E/DhcpStateMachine(590): DHCP failed on wlan0: Timed out waiting for DHCP to finish
01-29 12:44:51.800: D/dalvikvm(10936): GC_EXPLICIT freed 542K, 23% free 11371K/14680K, paused 2ms+5ms, total 38ms
01-29 12:44:51.960: D/alsa_ucm(165): snd_use_case_set(): uc_mgr 0x41fa22a0 identifier _verb value Inactive
01-29 12:44:51.960: D/alsa_ucm(165): Set mixer controls for HiFi Lowlatency enable 0
01-29 12:44:51.960: D/alsa_ucm(165): snd_use_case_set(): uc_mgr 0x41fa22a0 identifier _disdev value Speaker
01-29 12:44:51.960: D/alsa_ucm(165): Set mixer controls for Speaker enable 0
01-29 12:44:52.360: D/overlay(162): FROM_STATE = OV_BYPASS_3_LAYER TO_STATE = OV_CLOSED
01-29 12:44:52.410: D/dalvikvm(590): GC_EXPLICIT freed 418K, 31% free 25728K/37136K, paused 9ms+10ms, total 128ms
01-29 12:44:53.722: D/dalvikvm(10936): GC_EXPLICIT freed 362K, 23% free 11371K/14680K, paused 2ms+5ms, total 37ms
01-29 12:44:54.262: D/dalvikvm(590): GC_EXPLICIT freed 420K, 31% free 25728K/37136K, paused 3ms+9ms, total 94ms
01-29 12:44:55.544: D/dalvikvm(10936): GC_EXPLICIT freed 367K, 23% free 11373K/14680K, paused 4ms+5ms, total 47ms
01-29 12:44:56.014: D/dalvikvm(590): GC_EXPLICIT freed 418K, 31% free 25728K/37136K, paused 3ms+10ms, total 93ms
01-29 12:44:57.195: D/dalvikvm(10936): GC_EXPLICIT freed 365K, 23% free 11373K/14680K, paused 2ms+5ms, total 36ms
01-29 12:44:57.275: I/wpa_supplicant(765): wlan0: Authentication with 00:04:96:2a:7a:2a timed out.
01-29 12:44:57.756: D/dalvikvm(590): GC_EXPLICIT freed 429K, 31% free 25730K/37136K, paused 4ms+9ms, total 107ms
01-29 12:44:58.857: W/ActivityManager(590): Activity idle timeout for ActivityRecord{42aab158 u0 uk.co.appogee.cfh_rds/.deliver.Deliver}
01-29 12:44:58.907: D/overlay(162): FROM_STATE = OV_CLOSED TO_STATE = OV_BYPASS_3_LAYER
01-29 12:44:58.957: I/wpa_supplicant(765): wlan0: Trying to associate with 00:04:96:2a:7a:59 (SSID='APPOGEE' freq=2452 MHz)
01-29 12:44:59.027: D/dalvikvm(10936): GC_EXPLICIT freed 365K, 23% free 11374K/14680K, paused 5ms+7ms, total 66ms
01-29 12:44:59.027: I/wpa_supplicant(765): wlan0: CTRL-EVENT-ASSOC-REJECT bssid=00:04:96:2a:7a:59 status_code=1
01-29 12:44:59.468: D/dalvikvm(590): GC_EXPLICIT freed 462K, 31% free 25737K/37136K, paused 3ms+11ms, total 96ms
01-29 12:45:00.929: D/dalvikvm(10936): GC_EXPLICIT freed 357K, 23% free 11374K/14680K, paused 3ms+5ms, total 36ms
01-29 12:45:01.270: D/dalvikvm(590): GC_EXPLICIT freed 443K, 31% free 25734K/37136K, paused 4ms+10ms, total 94ms
01-29 12:45:01.920: D/overlay(162): FROM_STATE = OV_BYPASS_3_LAYER TO_STATE = OV_CLOSED
01-29 12:45:02.641: D/dalvikvm(10936): GC_EXPLICIT freed 359K, 23% free 11375K/14680K, paused 2ms+6ms, total 39ms
01-29 12:45:02.932: D/dalvikvm(590): GC_EXPLICIT freed 417K, 31% free 25733K/37136K, paused 3ms+9ms, total 113ms
01-29 12:45:04.443: D/dalvikvm(10936): GC_EXPLICIT freed 363K, 23% free 11376K/14680K, paused 2ms+5ms, total 36ms
01-29 12:45:04.643: D/dalvikvm(590): GC_EXPLICIT freed 416K, 31% free 25733K/37136K, paused 3ms+10ms, total 98ms
01-29 12:45:05.274: D/overlay(162): FROM_STATE = OV_CLOSED TO_STATE = OV_BYPASS_3_LAYER
01-29 12:45:05.965: D/dalvikvm(10936): GC_EXPLICIT freed 362K, 23% free 11377K/14680K, paused 2ms+4ms, total 39ms
01-29 12:45:06.095: D/dalvikvm(590): GC_EXPLICIT freed 422K, 31% free 25733K/37136K, paused 7ms+10ms, total 127ms
01-29 12:45:06.936: D/overlay(162): FROM_STATE = OV_BYPASS_3_LAYER TO_STATE = OV_CLOSED
01-29 12:45:06.936: I/InputReader(590): Reconfiguring input devices.  changes=0x00000004
01-29 12:45:06.936: I/InputReader(590): Device reconfigured: id=6, name='touch_dev', size 768x1280, orientation 3, mode 1, display id 0
01-29 12:45:06.936: I/ActivityManager(590): Config changed: {1.3 234mcc20mnc en_GB ldltr sw384dp w598dp h359dp 320dpi nrml land finger -keyb/v/h -nav/h s.23}

person John    schedule 29.01.2013    source источник
comment
Где работает этот код? Было бы полезно увидеть немного больше вашего кода (например, где устанавливается обратный вызов, как выглядит этот fn и т. д.), или если бы вы могли просто поделиться ссылкой на apk, если она не слишком личная.   -  person Daniel Smith    schedule 29.01.2013
comment
Спасибо за ваш комментарий, я добавил еще немного кода. Он все еще абстрагирован, так как я не могу поделиться полным кодом или apk, но, надеюсь, это лучше описывает то, чего я пытаюсь достичь.   -  person John    schedule 30.01.2013


Ответы (2)


Итак, основываясь на информации в этой проблеме zxing, я сегодня играл с этим, мой текущий код (который не работает):

List<Size> supportedPreviewSizes = mCamera.getParameters().getSupportedPreviewSizes();
parameters.setPreviewSize(supportedPreviewSizes.get(2).width, supportedPreviewSizes.get(2).height);

Если я изменю это на:

List<Size> supportedPreviewSizes = mCamera.getParameters().getSupportedPreviewSizes();
parameters.setPreviewSize(supportedPreviewSizes.get(0).width, supportedPreviewSizes.get(0).height);

Затем он получает обратные вызовы. Теперь я знаю (находясь в отладке), что getSupportedPreviewSizes возвращает мне список с 12 элементами, поэтому не происходит исключения индекса за пределами. Я не знаю, почему это работает, но это работает (в моем случае). Кто-нибудь может дать объяснение? Или комментарий о том, как другие выбирают, какой размер использовать, есть ли какой-то логический способ определить, какой размер «лучший»? К сожалению, «лучший» субъективен и зависит от того, для чего вы хотите использовать изображение?

person John    schedule 06.02.2013
comment
Я считаю, что Nexus 4 сообщает о размерах, поддерживаемых лицевой и задней камерами вместе. Это не правильное поведение, имхо. - person Alex Cohn; 20.05.2013
comment
Я воспроизвел ваш код на Nexus 4 v.4.2.2 (JDQ39); нет проблем с обратным вызовом изображения при разрешении 768x432 на любой из камер. - person Alex Cohn; 23.05.2013

У меня была такая же проблема с HTC Desire 620, единственным телефоном, с которым я столкнулся, который не вызывал PictureCallback.

Решение, которое я нашел, состояло в том, чтобы добавить setPreviewSize непосредственно перед вызовом takePicture См. ниже, надеюсь, это поможет.

                    mCameraParams.setPictureSize(mSize.width, mSize.height);
                    mCameraParams.setPreviewSize(mSize.width, mSize.height);
                    if (isFlashAvailable()) {
                        mCameraParams
                                .setFlashMode(_flashModes[_flashMode]);
                    }
                    try {
                        mCamera.setParameters(mCameraParams);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    is_camera_ready = false;

                    Log.d(TAG, "mCamera.takePicture");
                    mCamera.takePicture(null, null, new Camera.PictureCallback() {

                        @Override
                        public void onPictureTaken(byte[] data,
                                                   Camera camera) {
                            Log.d(TAG, "onPictureTaken jpeg");
                                mCamera.stopPreview();
                                if (data != null) {
                                    try {
                                        mBitmap = BitmapFactory
                                                .decodeByteArray(data, 0,
                                                        data.length);
                                    } catch (OutOfMemoryError e) {
                                        e.printStackTrace();
                                        try {
                                            mBitmap = BitmapFactory
                                                    .decodeByteArray(data, 0,
                                                            data.length);
                                        } catch (OutOfMemoryError e2) {
                                            e2.printStackTrace();
                                        }
                                    }
                                    is_camera_ready = true;
                                    mCamera.startPreview();
                                    mPreview.refreshDrawableState();
                                }
                        }
                    });
person Golan Shay    schedule 24.10.2016