【问题标题】:Android: takePicture() not making soundAndroid:takePicture() 没有声音
【发布时间】:2012-06-05 04:50:52
【问题描述】:

我正在使用 Camera 类中的 takePicture() 方法。它拍了照片,但它没有声音!我的客户想要 Android 发出的默认点击声音。

我看过其他线程,似乎问题在于禁用声音,而不是相反!为什么我的应用没有发出点击声??

【问题讨论】:

    标签: android camera default


    【解决方案1】:

    我也有这个问题。我通过使用以下代码解决了它: 下面是用来调用takePicture的:

    clickButton.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(final View view) {
                    mCamera.takePicture(shutterCallback, null, onPicTaken);
                }
            });
    

    现在ShutterCallBack:

    private final ShutterCallback shutterCallback = new ShutterCallback() {
            public void onShutter() {
                AudioManager mgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
                mgr.playSoundEffect(AudioManager.FLAG_PLAY_SOUND);
            }
        };
    

    现在从相机拍照后做任何事情:

         /**
         * This will be called after taking picture from camera.
         */
        final transient private PictureCallback onPicTaken = new PictureCallback() {
            /**
             * After taking picture, onPictureTaken() will be called where image
             * will be saved.
             * 
             */
            @Override
            public void onPictureTaken(final byte[] data, final Camera camera) {
             }
    

    这将在单击捕获按钮时播放声音。

    谢谢你:)

    【讨论】:

    • 哇!!!!你救了我的一天Shrikant!有效!! =D 非常感谢!! =) 还有一个问题。我使用的是 Galaxy Tab 10.1,它在我的应用程序中发出的声音与平板电脑中的默认相机应用程序不同。您认为 Samsumg 可能为其原生相机应用程序定制了声音吗?
    • 是的,但说真的,我不太确定。
    【解决方案2】:

    如果你想让相机播放默认的android声音,你必须给它一个empty快门回调。

    ShutterCallback shutterCallback = new ShutterCallback() {
        @Override
        public void onShutter() { 
            /* Empty Callbacks play a sound! */
        }
    };
    
    mCamera.takePicture(shutterCallback , null, onPicTaken);
    

    在 HTC One SV 和三星 Galaxy XCover 2 上测试。

    你给回调一个空的快门回调,然后它播放默认声音。

    如果您使用空的ShutterCallback 调用takePicture,相机将不会播放任何声音。

    Shrikant 的答案有效,但可能会出现意外行为,因为 mgr.playSoundEffect(); 不打算与 AudioManager.FLAG_PLAY_SOUND 一起调用,因为 the doc 状态。

    【讨论】:

    • 为我工作。谢谢@HOLLO
    猜你喜欢
    • 2017-03-16
    • 2017-10-19
    • 2021-04-22
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多