【问题标题】:Android Camera.takePicture - Possible to disable shutter sound and preview surface?Android Camera.takePicture - 可以禁用快门声音和预览表面吗?
【发布时间】:2012-02-02 03:51:42
【问题描述】:

我正在开发一个允许用户快速点击并忘记快照的应用程序。除了相机以我想要的方式工作外,大部分应用程序都已完成。现在我的相机正在工作,但我似乎找不到禁用快门声音的方法,也找不到禁用显示预览的方法。我可以用控件覆盖预览,但如果可能的话,我宁愿不显示它。

总而言之,这些是我想在使用内置相机控件时禁用的项目。

  1. 快门声音
  2. 相机屏幕显示
  3. PictureTaken 上的图像预览

有没有人知道可以为我指明正确方向的资源,我将不胜感激。我一直在密切关注 this sample 的 CommonsWare 示例。

谢谢。

【问题讨论】:

    标签: android android-camera


    【解决方案1】:

    这实际上是手机的 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");
        }
    

    可以注意到,点击声音是在没有您交互的情况下开始的。

    这是姜饼源码中使用的服务。

    他们允许这样做的原因是因为某些国家/地区是非法的。实现您想要的唯一方法是拥有自定义 ROM。

    更新

    如果这里说的是:http://androidforums.com/t-mobile-g1/6371-camera-shutter-sound-effect-off.html

    仍然适用,然后您可以编写一个计时器,将声音(静音模式)关闭几秒钟,然后在每次拍照时重新打开。

    【讨论】:

    • 嗯。好的,我知道可以将手机切换到静音模式,然后再切换回常规模式,但似乎这不适用于所有设备。你认为有可能告诉相机在快门上播放什么声音吗?也许我可以用自定义声音文件替换快门默认声音(例如,只是空的声音)......
    • 除非手机已root,否则这是不可能的。用户/系统甚至不能更改文件夹/文件的内容,ONLY root 可以。顺便说一句,我在谈论文件权限。
    • 谢谢 JoxTraex,我想我已经决定放弃无声图片的想法,以免违反任何法律。您知道是否可以录制无声视频片段吗?假设我将其设置为录制 1 秒的视频剪辑,我想知道是否需要播放快门/录制声音。
    • "所以不要违反任何法律"???怎么回事?全世界几乎每个国家都安装了数百万台摄像机,用于监控人员和建筑物。你们这些人是从哪里想出这些荒谬的想法的?
    • 这不是一个荒谬的想法。它是对手机的限制。阅读google.com/…
    【解决方案2】:

    您可以使用预览回调中的数据,使用函数将其保存在某种类型的触发器(例如按钮)上的图片上,使用 onclick 侦听器。您可以将图像压缩为 jpeg 或 png。这样,就没有shutterCallback要实现了。因此,您可以在拍照时播放任何您想要的声音或不播放任何声音。

    【讨论】:

      【解决方案3】:

      您可以通过在 xml 文件中为其指定 1p 的尺寸来有效地隐藏预览表面(我找到了一个示例,即 0p,但由于某种原因,这给了我错误)。

      在某些地方设置静音快门可能是违法的,但美国似乎不是这样的地方,因为我的 HTC One 让我可以选择静音,事实上,自从 Android 4.2可以这样做:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-06
        • 1970-01-01
        • 1970-01-01
        • 2012-03-25
        • 2010-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多