调用android快门拍照_android调用快门声 - CSDN
  • Android 7.0调用相机拍照,返回后显示拍照照片,并显示到手机相册中
    在7.0以前,调用相机拍照时一般如下
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
            + "/test/" + System.currentTimeMillis() + ".jpg");
    file.getParentFile().mkdirs();
    
    Uri uri = Uri.fromFile(file);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    在用Android 7.0版本时,出现了异常 FileUriExposedException,就是在传递uri时出错
    百度了一下,说是Android 7.0后又修改了文件权限,可以使用FileProvider解决
    1.在 res 目录下新建文件夹 xml 然后创建资源文件 filepaths(随意名字)
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <external-path
            name="images"
            path="test/"/>
    </resources>
    其中
    <files-path/> //代表的根目录: Context.getFilesDir()
    <external-path/> //代表的根目录: Environment.getExternalStorageDirectory()
    <cache-path/> //代表的根目录: getCacheDir()
    2.在manifest中添加provider
    <application
       
       ......
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.xykj.customview.fileprovider" 
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepaths"/>
        </provider>
    </application>
    3.在java代码中
    /**
     * 使用相机
     */
    private void useCamera() {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
                + "/test/" + System.currentTimeMillis() + ".jpg");
        file.getParentFile().mkdirs();
        
        //改变Uri  com.xykj.customview.fileprovider注意和xml中的一致
        Uri uri = FileProvider.getUriForFile(this, "com.xykj.customview.fileprovider", file);
        //添加权限
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        startActivityForResult(intent, REQUEST_CAMERA);
    }
    调用相机拍照,图片得存储吧,存储图片又需要权限,因此动态申请权限
    AndroidManifest.xml文件中
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    java代码中
    public void applyWritePermission() {
    
        String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
    
        if (Build.VERSION.SDK_INT >= 23) {
            int check = ContextCompat.checkSelfPermission(this, permissions[0]);
            // 权限是否已经 授权 GRANTED---授权  DINIED---拒绝
            if (check == PackageManager.PERMISSION_GRANTED) {
                //调用相机
                useCamera();
            } else {
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
            }
        } else {
            useCamera();
        }
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            useCamera();
        } else {
            // 没有获取 到权限,从新请求,或者关闭app
            Toast.makeText(this, "需要存储权限", Toast.LENGTH_SHORT).show();
        }
    }
    然后在ImageView点击事件中调用applyWritePermission()方法 并在onActivityResult中编写显示图片的代码
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1 && resultCode == RESULT_OK) {
            Log.e("TAG", "---------" + FileProvider.getUriForFile(this, "com.xykj.customview.fileprovider", file));
            imageView.setImageBitmap(BitmapFactory.decodeFile(file.getAbsolutePath()));
        }
    }
    完成,看下FileProvider.getUriFile方法得到的Uri结果
    content://com.xykj.customview.fileprovider/images/1494663973508.jpg
    可以发现 name为临时的文件夹名 path为自己定义路径的文件夹名
    <resources>
        <external-path name="images" path="test/"/>
    </resources>
    4.最后发现此方法相机拍照的图片并没有显示在手机图库中
    想要在手机相册图库中显示刚拍照的图片可以采用发送广播的方式
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1 && resultCode == RESULT_OK) {
            headImageView.setImageURI(Uri.fromFile(file));
    
            //在手机相册中显示刚拍摄的图片
            Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
            Uri contentUri = Uri.fromFile(file);
            mediaScanIntent.setData(contentUri);
            sendBroadcast(mediaScanIntent);
        }
    }

    展开全文
  • android4.2之后Camera的framework层Camera.java里面加上了...通过在app里调用enableShutterSound(true)或者enableShutterSound(false)就可以实现拍照的时候开启或者关闭快门音。 但是需要注意的是:很多机...

    android4.2之后Camera的framework层Camera.java里面加上了enable或者disable快门音的接口:

    enableShutterSound(boolean enabled)

    通过在app里调用enableShutterSound(true)或者enableShutterSound(false)就可以实现拍照的时候开启或者关闭快门音。

    但是需要注意的是:很多机器是强制快门音的,也就是说你在app里调用上述接口也许根本不起作用,你明明enableShutterSound(false)了,但是拍照的时候快门音照样响起,原因在于烧制的系统版本里面有一个值被写死了:ro.camera.sound.forced = 1

    可以adb shell进到device里面,getprop ro.camera.sound.forced如果得到是0,说明快门音可以被静音处理,调用enableShutterSound(false)能起作用;如果是1,说明快门音被强制设置了,这时调用enableShutterSound(false)就不起作用。

     

    要想让Camera的快门音能够被静音,就需要在编译供烧机的系统版本之前,将ro.camera.sound.forced设成0,各家硬件平台定义这个值的地方可能稍有差异,但是大致都在以下位置:

    (1)Intel 一般在 vendor/intel/common/init.common.rc里面

    (2)qcom 一般在device/qcom/YOURPLATFORM/system.prop里面

    (3)Samsung 一般在device/YOURPROJECT/system.prop里面

    (4)MTK 一般在mediatek/config/YOURPROJECT/system.prop里面

    转载于:https://www.cnblogs.com/wuqinghua/archive/2013/06/01/3112502.html

    展开全文
  • 现在Android手机一般都会带有照相功能,有很多朋友就发现手机照相快门声音很响,想关又关不掉。。。。。不过话说回来,静音拍照你想做啥? 来到主题上,因为网络上有很多关于“删除或修改快门声音文件是关闭快门声...
        

    文/腾讯优测 吴宇焕

    现在Android手机一般都会带有照相功能,有很多朋友就发现手机照相时快门声音很响,想关又关不掉。。。。。不过话说回来,静音拍照你想做啥?

    来到主题上,因为网络上有很多关于“删除或修改快门声音文件是关闭快门声的方法”的内容,所以我就不赘述了。今天我想和大家说的是:在开发中,针对camera的静音功能我们会遇到哪些机型兼容问题?

    从Google官方API中也没有明确的指出关于相机拍照时快门声音是如何控制的,关于shutter第一个参数API只是解释为在相机拍照的瞬间进行回调,并没有明确说明是否是对拍照声音的操作。

    图片描述

    当调用Camera的takePicture方法进行拍照时,为了防止偷拍等行为,会发出快门拍照的声音,而且此声音无法通过调节音量进行关闭,但由于不同机型不同Rom的差别,使得各个厂商针对此声音的处理不同。

    至此我总结了使用takePicture中ShutterCallback来控制拍照声音的三种情况:

    1、当takePicture传入第一个参数ShutterCallback(ShutterCallback参数不为空)时,系统会发出快门拍照的声音。

    例如HTC 3D EVO,因此这款手机的快门声音可以通过此方法进行控制。

    图片描述

    2、无论是否传入ShutterCallback参数系统都没有快门拍照的声音。

    例如LG P720手机就有此问题,此类手机问题比较严重,手机厂商自行修改了Rom,导致任何情况下调用takePicture方法进行拍照都没有声音,通过反编译系统照相机可以看出,系统照相机拍照声音是可以随意控制的,当需要声音时直接在应用中调用SoundPool发出拍照音效,否则静音处理。所以我们在设计应用时针对这类机型也可以自行控制拍照声音。

    而步步高vivo Y1手机同样有此现象,但和LG不同的是,这款机型的厂商修改了Rom,把拍照声音的控制写在了HAL层中,调用声音的接口没有暴露出来,我们只能通过反射进行对声音的设置。腾讯优测作为优质的云测试平台,可以解决众多机型的兼容性问题,让测试更简单。

    3、无论是否传入ShutterCallback参数系统都有快门拍照的声音。

    例如华为Y220t,这类手机比较麻烦,通过反编译Framework层关于拍照声音是在硬件抽象层(HAL)实现的,所以应用开发无法通过代码控制拍照声音的播放,只能给以相应的提示告诉用户当前静音无效,拍照时会发出快门的声音。

    综上所述,使用takePicture中ShutterCallback来控制快门声音时需要针对不同机型做不同处理。

    想了解更多干货,欢迎关注腾讯优测微信号:优测网(wxutest)

    腾讯优测:

    腾讯优测是备受客户信赖的移动云测试平台,为应用、游戏,H5混合应用的研发团队提供产品质量检测与问题解决服务。不仅在线上平台提供「全面兼容测试」、「源码缺陷分析」、「远程真机租用」等多种质量检测工具,更为VIP客户配备专家团队提供定制化综合测试解决方案。真机实验室配备上千款手机,覆盖市面98%主流机型,7*24小时在线运行,覆盖亿级用户。

    展开全文
  • 原文 https://blog.csdn.net/Aaron121314/article/details/78052830google默认会根据sim卡来觉得要不要有快门...默认情况下Camera拍照是有快门声音的,是通过这个地方控制的 /android/frameworks/base/core/res/re...

    原文 https://blog.csdn.net/Aaron121314/article/details/78052830

    google默认会根据sim卡来觉得要不要有快门声音,如果插日本的卡拍照就一定有声音,如果别的卡就可以在camera中取消声音。需要注意一下。

    默认情况下Camera拍照是有快门声音的,是通过这个地方控制的 
    /android/frameworks/base/core/res/res/values/config.xml

        <!-- Whether camera shutter sound is forced or not  (country specific). -->
        <bool name="config_camera_sound_forced">false</bool>
    • 1
    • 2

    如果设置成false,camera程序就可以控制快门声音。如果设置成true,就强制必须有快门声音,不管是不是静音模式,一般在日本有这个要求。 
    注意:这个值可能会被overlay,device/qcom/common/device/overlay/frameworks/base/core/res/res/values/config.xml


    展开全文
  • 现在Android智能手机的像素都会提供照相的功能,大部分的手机的摄像头的像素都在1000万以上的像素,有的甚至会更高。它们大多都会支持光学变焦、曝光以及快门等等。 下面的程序Demo实例示范了使用Camera v2来进行...
  • 最近总想写写,但又不知写些什么,想了想,今天写个Camera拍照的教程吧。本例子的流程为 首先通过SurfaceView将Camera的实时画面显示在屏幕上,然后通过点击拍照对当前画面进行捕捉,最后将获得的图片保存至本地。 ...
  • 现在Android手机一般都会带有照相功能,有很多朋友就发现手机照相快门声音很响,想关又关不掉。。。。。不过话说回来,静音拍照你想做啥?来到主题上,因为网络上有很多关于“删除或修改快门声音文件是关闭快门声...
  • Android调用相机接口

    2012-03-19 17:57:34
    Android调用照相功能   android调用照相功能有两种方法   一种是调用系统自带的camera:能够用Intent直接开启 另一种是利用SurfaceView:能够添加自己想要的功能 下面是代码: 方法一 package ...
  • 这篇博客为大家介绍Android自定义相机,并且实现倒计时拍照功能。首先自定义拍照会用到SurfaceView控件显示照片的预览区域,以下是布局文件:activity_main.xml<FrameLayout xmlns:android=...
  • Android P 相机拍照音程序流程 一 Android P 相机拍照音程序流程 二 上一章节中静态分析了相机拍照音流程,本章节中在 CameraService 中添加堆栈信息,动态分析拍照音的流程。 堆栈信息参考:Android 使用 addr2...
  • Android调用照相功能

    2010-11-21 01:42:00
    <br />android调用照相功能有两种方法 一种是调用系统自带的camera:能够用Intent直接开启 另一种是利用SurfaceView:能够添加自己想要的功能 下面是代码: 方法一 package ...
  • Android 8.1/9.0 MTK Camera源码分析之快门声音控制 在Android 8.1上mtk camera有控制快门声音的接口,但是并没有了控制录像快门声音的接口。之所以会有这个现象,主要原因是mtk camera仍旧使用的camera api1的接口...
  • 一、main.xml布局文件 <?xml version="1.0" encoding="utf-8"?> ...LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ... android:orientation=... android:layout_width="fil...
  • 声明requestCode常量: public strait final int TACK_RECORD =10000; public strait final int TACK_PHOTO =10001; public strait final int TACK_...1.拍照代码: Intent openCameraIntent = new Intent(Med...
  • 调用takePicture方法时需要传入三个参数,分别是:public void TakePicture() { if (mCamera == null) throw new NullPointerException("Camera is null,please check it"); Log.i(TAG, "...
  • Android开发过程中,有时需要调用手机自身设备的功能,本文侧重摄像头拍照功能的调用。 知识点介绍: 使用权限:调用手机自身设备功能(摄像头拍照功能),应该确保已经在AndroidManifest.xml中正确声明了对摄像头...
  • 因此,google也就非常人性化的将播放拍照声音的函数,放到了cameraService中,防止开发者能开发出不响的camera,从而只要调用拍照函数,一定会响,这是写死在framework中的。  话说这个规定在当今有点不合时宜,这...
1 2 3 4 5 ... 20
收藏数 973
精华内容 389
关键字:

调用android快门拍照