Android Camera.takePicture - можно отключить звук затвора и предварительный просмотр поверхности? - PullRequest
2 голосов
/ 02 февраля 2012

Я работаю над приложением, которое позволит пользователю быстро щелкнуть и забыть снимки.Большая часть приложения сделана за исключением камеры, работающей так, как мне бы хотелось.Прямо сейчас у меня работает камера, но я не могу найти способ отключить звук затвора, и я не могу найти способ отключить отображение предварительного просмотра.Мне удалось скрыть предварительный просмотр с помощью элемента управления, но я бы предпочел просто не отображать его, если это возможно.

Подводя итог, я хочу отключить эти элементы при использовании встроенной камеры.управления.

  1. Звук затвора
  2. Отображение экрана камеры
  3. Предварительный просмотр изображения на PictureTaken

Кто-нибудь знает о ресурсе, который может указывать мнев правильном направлении, я был бы очень признателен.Я следовал примеру CommonsWare из этого образца довольно близко.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 02 февраля 2012

На самом деле это свойство в build.prop телефона.Я не уверен, возможно ли это изменить.Если вы полностью не переопределите его и не используете свой собственный код камеры.Использование того, что вы можете, доступно в SDK.

Взгляните на это:

CameraService.cpp .,.

CameraService::Client::Client(const sp<CameraService>& cameraService,
        const sp<ICameraClient>& cameraClient,
        const sp<CameraHardwareInterface>& hardware,
        int cameraId, int cameraFacing, int clientPid) {
        mPreviewCallbackFlag = FRAME_CALLBACK_FLAG_NOOP;
            mOrientation = getOrientation(0, mCameraFacing == CAMERA_FACING_FRONT);
            mOrientationChanged = false;
            cameraService->setCameraBusy(cameraId);
            cameraService->loadSound();
            LOG1("Client::Client X (pid %d)", callingPid)
    }

    void CameraService::loadSound() {
        Mutex::Autolock lock(mSoundLock);
        LOG1("CameraService::loadSound ref=%d", mSoundRef);
        if (mSoundRef++) return;

        mSoundPlayer[SOUND_SHUTTER] = newMediaPlayer("/system/media/audio/ui/camera_click.ogg");
        mSoundPlayer[SOUND_RECORDING] = newMediaPlayer("/system/media/audio/ui/VideoRecord.ogg");
    }

Как можно заметить, звук щелчка запускается без вашего взаимодействия.

Эта служба используется в исходном коде Gingerbread.

Причина, по которой они НЕ допускают это, заключается в том, что в некоторых странах она запрещена.Единственный способ добиться того, чего вы хотите - это иметь пользовательское ПЗУ.

Обновление

Если сказанное здесь: http://androidforums.com/t-mobile-g1/6371-camera-shutter-sound-effect-off.html

все еще применяетсязатем вы можете написать таймер, который отключает звук (бесшумный режим) на пару секунд, а затем снова включать его каждый раз, когда вы делаете снимок.

2 голосов
/ 14 марта 2012

Вы можете использовать данные из обратного вызова предварительного просмотра, используя функцию, чтобы сохранить их на изображении в каком-либо типе триггера, например кнопке, с помощью прослушивателя onclick.Вы можете сжать изображение в JPEG или PNG.Таким образом, нет функции shutterCallback для реализации.и, следовательно, вы можете воспроизводить любой звук, какой захотите, или вообще не воспроизводить его во время съемки.

1 голос
/ 20 мая 2014

Вы можете эффективно скрыть поверхность предварительного просмотра, задав ей размеры 1p в файле xml (я нашел пример с указанным 0p, но по какой-то причине он вызывал ошибки).

Может быть незаконно иметь в некоторых местах тихий затвор, но не похоже, что США - это такое место, так как мой HTC One дает мне возможность заставить его замолчать, и фактическиAndroid 4.2 вы можете сделать это:

Camera.CameraInfo info=new Camera.CameraInfo();
if (info.canDisableShutterSound) {
    camera.enableShutterSound(false);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...