如何直接调用安卓Android的系统相机的前置摄像头?

dashan618 2017-07-06 02:07:26
如题. 需要直接调用原生相机的前置摄像头, 而不是通过自定义的方式.
网上有两种方式
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra("android.intent.extras.CAMERA_FACING_FRONT", 1);
// 调用前置摄像头
startActivityForResult(intent, 1);



Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra("camerasensortype", 2); // 调用前置摄像头
intent.putExtra("autofocus", true); // 自动对焦
intent.putExtra("fullScreen", false); // 全屏
intent.putExtra("showActionIcons", false);
startActivityForResult(intent, 1);

这两种方法依然打开的是后置的摄像头. 里边的参数不管换成0, 1, 2 都不好使. 求指点, 急求!
...全文
8665 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
怎么可以自定义打开的摄像头的位置(在一个组件内显示,而不是全屏)
gyx549347187_ggg 2019-03-11
  • 打赏
  • 举报
回复
我也遇到这个问题,Android8.0 会有这个问题,系统相机开的哪个摄像头,你就吊哪个摄像头,亲测,如果产品非要前置,直接重写个相机吧
所谓的所谓 2017-11-02
  • 打赏
  • 举报
回复
你的自定义相机效果怎么样?
dashan618 2017-10-30
  • 打赏
  • 举报
回复
谢谢各位的关注和帮忙. 在这里统一回复下. 最后依然没有找到能直接调用系统前置摄像头的方法. 最后还是自己自定义了一个相机. 关于自定义相机, 网上应该有差不多的DEMO,这里就不码代码了. 谢谢各位!
所谓的所谓 2017-10-27
  • 打赏
  • 举报
回复
@perry_du 你这个是调用系统相机么。。
所谓的所谓 2017-10-27
  • 打赏
  • 举报
回复
问个问题,最后怎么解决的?
perry_du 2017-09-25
  • 打赏
  • 举报
回复
现在的同学,学习Android,都不是很系统。 可以阅读一下官方文档:https://developer.android.com/reference/android/hardware/Camera.html 虽然Camera在API 21已经废弃,但是还是可以查询的到,目前大多数项目应该也是用的1楼的方法。 随便写了下,贴一下代码吧。
final SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceview);
        findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int numCameras = Camera.getNumberOfCameras();
                if (numCameras == 0) {
                    return;
                }

                Camera.CameraInfo selectedCameraInfo = null;
                int index;
                index = 0;
                while (index < numCameras) {
                    Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
                    Camera.getCameraInfo(index, cameraInfo);
                    if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
                        selectedCameraInfo = cameraInfo;
                        break;
                    }
                    index++;
                }

                Camera camera;
                if (index < numCameras) {
                    camera = Camera.open(index);
                } else {
                    camera = Camera.open(0);
                    selectedCameraInfo = new Camera.CameraInfo();
                    Camera.getCameraInfo(0, selectedCameraInfo);
                }

                if (camera == null) {
                    return ;
                } else {
                    try {
                        camera.setPreviewDisplay(surfaceView.getHolder());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    camera.startPreview();
                }
            }
        });
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

    <Button
        android:id="@+id/button1"
        android:layout_gravity="center_horizontal"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:text="打开摄像头"/>

    <SurfaceView
        android:id="@+id/surfaceview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>
 <uses-permission android:name="android.permission.CAMERA" />
 <uses-feature android:name="android.hardware.camera" />
 <uses-feature android:name="android.hardware.camera.autofocus" />
希望能帮助你们~
zJianFlys 2017-09-22
  • 打赏
  • 举报
回复
都试了贴出来的方法,不得行 手机为华为畅享7
土豆泥炸彈 2017-07-19
  • 打赏
  • 举报
回复
老铁,这个问题很诡异,但是看了看相机的源码之后你会发现,你设置自动对焦了,收到自动对焦的Intent后,相机会过滤支持对焦的摄像头,然而你的前置摄像头不支持自动对焦,所以怎么设置都是后置,去掉那句就行了 上一种方法在新的SDK中被弃用了
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra("camerasensortype", 2); // 调用前置摄像头
//intent.putExtra("autofocus", true); // 自动对焦  去掉这句吧
intent.putExtra("fullScreen", false); // 全屏
intent.putExtra("showActionIcons", false);
startActivityForResult(intent, 1);
再试下?
dashan618 2017-07-19
  • 打赏
  • 举报
回复
引用 19 楼 u011976566 的回复:
老铁,这个问题很诡异,但是看了看相机的源码之后你会发现,你设置自动对焦了,收到自动对焦的Intent后,相机会过滤支持对焦的摄像头,然而你的前置摄像头不支持自动对焦,所以怎么设置都是后置,去掉那句就行了 上一种方法在新的SDK中被弃用了
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra("camerasensortype", 2); // 调用前置摄像头
//intent.putExtra("autofocus", true); // 自动对焦  去掉这句吧
intent.putExtra("fullScreen", false); // 全屏
intent.putExtra("showActionIcons", false);
startActivityForResult(intent, 1);
再试下?
感谢大神支招! 用两部手机亲测了下, 注掉自动对焦那一行, 调出来的依然是后置摄像头。而且LOG里也没报什么错。真心无奈了。
dashan618 2017-07-18
  • 打赏
  • 举报
回复
引用 17 楼 xj396282771 的回复:
调用系统的方法始终还是有些问题,我网上查看了一些别的方法,和一楼的处理方式一样。我把我这边的DEMO发到你的163的邮箱里面喽,你看看喃
谢谢啦!我看了下。 不过, 难道只能通过自定义的方式吗? 郁闷了。 自定义的我老是设置不好前置摄像头的宽高比。 你看你给我发的那个是图样有点压扁了, 我之前自定义过一个,是头像拉长了。 我这里倒是有一个自定义的DEMO,别人写的, 它的前置摄像头倒是比例正常。要不您抽空给看一下? 它封装的太到位, 我看着太费劲,有点缕不过来……………… 您留个邮箱QQ啥的我发你, 可以呗?
dashan618 2017-07-17
  • 打赏
  • 举报
回复
引用 14 楼 xj396282771 的回复:
这几天太忙,都没时间看你的问题。我觉得和手机android的版本也有一定的关系,我那个可行的手机是android 5.1.1的
我用的那3款手机是4.4 , 7.0 和6.0的. 好像都不行, 我觉得是不是手机的问题的可能性大点? 比如厂家改了配置了?
Jing丶無雙 2017-07-17
  • 打赏
  • 举报
回复
调用系统的方法始终还是有些问题,我网上查看了一些别的方法,和一楼的处理方式一样。我把我这边的DEMO发到你的163的邮箱里面喽,你看看喃
Jing丶無雙 2017-07-17
  • 打赏
  • 举报
回复
应该不是,今天有空,继续帮你看看咋个解决吧
Jing丶無雙 2017-07-14
  • 打赏
  • 举报
回复
这几天太忙,都没时间看你的问题。我觉得和手机android的版本也有一定的关系,我那个可行的手机是android 5.1.1的
dashan618 2017-07-12
  • 打赏
  • 举报
回复
引用 12 楼 xj396282771 的回复:
我用了个android 7.0的华为手机,果然不行,我再调试看看,整理好了回复你
您好. 我用了三个测试机. 华为畅玩4, 荣耀8,三星6.0的一款机型. 貌似都不好使. 我邮箱zhoujunpeng618@163.com 目前我还没找到原因. 给您添麻烦啦!
Jing丶無雙 2017-07-12
  • 打赏
  • 举报
回复
我用了个android 7.0的华为手机,果然不行,我再调试看看,整理好了回复你
Jing丶無雙 2017-07-12
  • 打赏
  • 举报
回复
方便留个邮箱么,我把我这个Demo发你,还有就是我用的是小米4S,不知道楼主用得哪个牌子的手机测试??
dashan618 2017-07-11
  • 打赏
  • 举报
回复
引用 8 楼 xj396282771 的回复:
你的这句:intent.putExtra("android.intent.extras.CAMERA_FACING_FRONT", 1); 我的这句:intent.putExtra("android.intent.extras.CAMERA_FACING", 1); 望楼主试试,别看错了
还有. 用我这种方法写的话, 是调的原生的相机吧? 如果是的话, 那么不需要使用surfaceview之类的吧? int cameraCount = 0; Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); cameraCount = Camera.getNumberOfCameras(); for (int camIdx = 0; camIdx < cameraCount; camIdx++) { Camera.getCameraInfo(camIdx, cameraInfo); if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { if(camera != null) { camera.release(); camera = null; } try { camera = Camera.open(camIdx); } catch (RuntimeException e) { e.getLocalizedMessage(); } } } 但是现在就是open方法也执行了, 相机就是没有打开. 求各位指点!
dashan618 2017-07-11
  • 打赏
  • 举报
回复
引用 8 楼 xj396282771 的回复:
你的这句:intent.putExtra("android.intent.extras.CAMERA_FACING_FRONT", 1); 我的这句:intent.putExtra("android.intent.extras.CAMERA_FACING", 1); 望楼主试试,别看错了
您好. 我就是直接复制的您的.但是打开的摄像头确实是后置摄像头. 权限也都加了. 求指点!!!!!!
加载更多回复(6)

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧