Android Camera.takePicture - Possible to disable s

2019-04-01 18:30发布

问题:

I am working on an app that will allow a user to take quick click and forget snapshots. Most of the app is done except for the camera working that way I would like. Right now I have the camera working but I can't seem to find a way to disable the shutter sound and I cant find a way to disable displaying the preview. I was able to cover the preview up with a control but I would rather just not have it displayed if possible.

To sum things up, these are the items that I would like to disable while utilizing the built in Camera controls.

  1. Shutter sound
  2. Camera screen display
  3. Image preview onPictureTaken

Does anyone know of a resource that could point me in the right direction, I would greatly appreciate it. I have been following CommonsWare's example from this sample fairly closely.

Thank you.

回答1:

This is actually a property in the build.prop of a phone. I'm unsure if its possible to change this. Unless you completely override it and use your own camera code. Using what you can that is available in the SDK.

Take a look at this:

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");
    }

As can be noted, the click sound is started without your interaction.

This is the service used in the Gingerbread Source code.

The reason they DON'T allow this is because it is illegal is some countries. Only way to achieve what you want is to have a custom ROM.

Update

If what being said here: http://androidforums.com/t-mobile-g1/6371-camera-shutter-sound-effect-off.html

still applies, then you could write a timer that turns off the sound (Silent Mode) for a couple of seconds and then turn it back on each time you take a picture.



回答2:

You may use the data from the preview callback using a function to save it at a picture on some type of trigger such as a button, using onclick listener. you could compress the image to jpeg or png. In this way, there no shutterCallback to be implemented. and therefore you can play any sound you want or none when taking a picture.



回答3:

You can effectively hide the preview surface by giving it dimensions of 1p in the xml file (I found an example the said 0p but for some reason that was giving me errors).

It may be illegal to have a silent shutter in some places, but it doesn't appear that the US is such a place, as my HTC One gives me an option to silence it, and in fact, since Android 4.2 you can do this:

Camera.CameraInfo info=new Camera.CameraInfo();
if (info.canDisableShutterSound) {
    camera.enableShutterSound(false);
}