在Android设备中禁用相机的快门声音

时间:2013-06-24 09:07:10

标签: android android-camera android-camera-intent

我编写了一个简单的应用程序,用户可以在其中:

  • 按下按钮以打开相机应用程序
  • 使用相机应用程序拍摄照片

有没有办法从我的代码中禁用相机的快门声? 我目前持有一款带有Android 4.1.2版本的Orange Nivo手机。

我的代码的一部分是:

          public void onClick(View v) {
                try {
                    f = createImageFile();
                    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                    cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
                    startActivityForResult(cameraIntent, CAMERA_REQUEST);   
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }



            }
        });
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {  

            Bitmap photo = BitmapFactory.decodeFile(f.getAbsolutePath());
            Bitmap newphoto = Bitmap.createScaledBitmap(photo, 200, 200, false);     
            imageView.setImageBitmap(newphoto);

我很感激有关如何实现这种效果的任何建议。 我知道Android商店中的应用程序在没有快门声的情况下拍照,所以我想必须有一种方法可以在不使用手机的情况下执行此操作。

1 个答案:

答案 0 :(得分:1)

简单的答案是:你做不到!

原因是在没有快门制作声音的情况下拍照是违法的,这是出于隐私问题。此外,正如您将注意到的,即使出于隐私原因,即使未正确设置相机预览,也无法拍照。 此时您有四个选择:

  • 找到一种破解API的方法

  • 拔出手机并禁用快门声

  • 为相机编写您自己的本机代码......但这可能高度依赖于您正在使用它的设备

  • 使用最简洁的方式,这也是大多数(如果不是全部)静音相机使用的方式

市场上的应用。只需通过onClickListener中的onPreviewFrame回调拦截预览帧,然后将其另存为图像。这里的主要缺点是最大预览分辨率远小于最大图像分辨率,因此您采用这种方式拍摄的照片分辨率相当低。事实上,如果您阅读市场上关于静音相机应用程序的评论,您会看到很多人抱怨图像的分辨率不是那么高。这就是为什么:他们使用我在上面开辟了你的技巧。

总而言之,没有简单的方法可以达到你想要的效果!