当前位置:首页 > 谈天说地 > 正文内容

Android实现极简打开摄像头

34资源网2022年03月29日 11:51292
站长推荐》》》》》摆摊地推这两款软件,一个月3000元-3万元轻松实现《《《《《站长推荐

很多时候忘记android摄像头如何打开,查看google文档的话,发现太复杂(只是单纯的想打开摄像头而已,不想添加那么多设置,添加那么功能),很多博客也是对官方文档的小修小改,连方法名都一样,因此,我决定完成android相机最简单的打开摄像头(仅仅打开)。很久没用忘掉的话,打开链接复制粘贴一下就完事了。

androidmanifest.xml设置camera权限后,在代码中还要设置权限检查,但是因为我连权限检查都懒得加了,装好后直接在手机系统里手动允许权限。

camera1(已废弃):

xml中使用surfaceview作为预览view

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.constraintlayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".mainactivity">

    <surfaceview
        android:id="@+id/surfaceview"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintbottom_tobottomof="parent"
        app:layout_constraintleft_toleftof="parent"
        app:layout_constraintright_torightof="parent"
        app:layout_constrainttop_totopof="parent" />

</androidx.constraintlayout.widget.constraintlayout>

mainactivity:

public class mainactivity extends appcompatactivity implements surfaceholder.callback{

    private surfaceholder holder;
    private camera camera;

    @override
    protected void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        requestwindowfeature(window.feature_no_title);
        getwindow().setflags(windowmanager.layoutparams.flag_fullscreen,
                windowmanager.layoutparams.flag_fullscreen);
        setcontentview(r.layout.activity_main);
        surfaceview surfaceview = findviewbyid(r.id.surfaceview);
        holder = surfaceview.getholder();
        holder.addcallback(this);
    }

    @override
    public void surfacecreated(surfaceholder holder) {
        if(camera == null){
            try {
                camera = camera.open(camera.camerainfo.camera_facing_back);
                camera.setpreviewdisplay(holder);
                camera.startpreview();
                camera.parameters parameters = camera.getparameters();
                parameters.setfocusmode(camera.parameters.focus_mode_auto);
                parameters.setflashmode(camera.parameters.flash_mode_auto);
                camera.setparameters(parameters);
                camera.setdisplayorientation(90);
            }catch (exception e){
                e.printstacktrace();
            }
        }
    }
}

这样就完成了最简单的打开摄像头并在手机中出现画面。(代码里去掉2个接口中未实现的方法)

camera2

android 5.0(api 21)以后,谷歌就决定废弃原有的camera api改用camera2 api,因为功能更强大

xml使用textureview作为预览(其实surfaceview也行,官方的demo是用textureview的一个子类):

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.constraintlayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".mainactivity">

    <textureview
        android:id="@+id/surfaceview"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintbottom_tobottomof="parent"
        app:layout_constraintleft_toleftof="parent"
        app:layout_constraintright_torightof="parent"
        app:layout_constrainttop_totopof="parent" />

</androidx.constraintlayout.widget.constraintlayout>

mainactivity:

public class mainactivity extends appcompatactivity implements textureview.surfacetexturelistener {

    private textureview textureview;

    private capturerequest.builder builder;

    @override
    protected void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        setcontentview(r.layout.activity_main);
        textureview = findviewbyid(r.id.surfaceview);
        textureview.setsurfacetexturelistener(this);
    }

    @override
    public void onsurfacetextureavailable(final surfacetexture surface, int width, int height) {
        cameramanager manager = (cameramanager) getsystemservice(camera_service);
        if (activitycompat.checkselfpermission(mainactivity.this, manifest.permission.camera)
                != packagemanager.permission_granted) {
            return;
        }
        try {
            manager.opencamera("0", new cameradevice.statecallback() {
                @override
                public void onopened(@nonnull cameradevice camera) {
                    try {
                    surfacetexture surfacetexture = textureview.getsurfacetexture();
                    surfacetexture.setdefaultbuffersize(1440,1080);
                    surface surface = new surface(surfacetexture);
                    builder = camera.createcapturerequest(cameradevice.template_preview);
                    builder.addtarget(surface);

                    camera.createcapturesession(arrays.aslist(surface),
                            new cameracapturesession.statecallback() {
                        @override
                        public void onconfigured(@nonnull cameracapturesession session) {
                            try {
                                session.setrepeatingrequest(builder.build(), null, null);
                            } catch (cameraaccessexception e) {
                                e.printstacktrace();
                            }
                        }

                        @override
                        public void onconfigurefailed(@nonnull cameracapturesession session) {

                        }
                    }, null);
                    } catch (cameraaccessexception e) {
                        e.printstacktrace();
                    }
                }

                @override
                public void ondisconnected(@nonnull cameradevice camera) {

                }

                @override
                public void onerror(@nonnull cameradevice camera, int error) {

                }
            }, null);
        } catch (cameraaccessexception e) {
            e.printstacktrace();
        }
    }
}

这样就成功使用camera2的api打开并预览了(代码里去掉3个接口中未实现的方法)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

看完文章,还可以用支付宝扫描下面的二维码领取一个支付宝红包,目前可领1-88元不等

支付宝红包二维码

除了扫码可以领取之外,大家还可以(复制 720087999 打开✔支付宝✔去搜索, h`o`n.g.包哪里来,动动手指就能领)。

看下图所示是好多参与这次活动领取红包的朋友:

支付宝红包

扫描二维码推送至手机访问。

版权声明:本文由34楼发布,如需转载请注明出处。

本文链接:https://www.34l.com/post/11232.html

分享给朋友:

相关文章

开一家一元水洗店创业的点子分享
开一家一元水洗店创业的点子分享

洗衣机是很多人家中必备的电器。但是在很多经济欠发达的地区,也有很多人家里没有洗衣机。在兰州市一些城乡接合部,一些挂有“1元洗衣店”牌子的小店,给居民们提供便利的同时,已悄然成为一种新兴的赚钱行业。1元店老板马维德就是他们中的佼佼者,他不但走...

用侠肝义胆造句30句
用侠肝义胆造句30句

1、李大哥侠肝义胆,受到四邻的交口称赞。2、村民见二位神仙眷侣侠肝义胆,救民水火,却落得个这般凄惨的下场,当下无人不落下泪来。3、还有蛊族毒宗的唯一传人,药宗里的第一才女,一朝沦落风尘的倾城之貌,侠肝义胆的流氓与巾帼,皇家琴师,断袖城主,独...

用不言谢造句17句分享
用不言谢造句17句分享

1、大恩不言谢,以后有什么用得上我的,尽管说!2、人们都说大恩不言谢,又说滴水之恩当涌泉相报,谢还是不谢?好为难!那今儿就不谢天不谢地,只谢朋友,谢谢你风雨一路的陪伴。感恩节快乐!3、大恩不言谢,我就是结草衔环,也不足为报。4、大恩不言谢,...

25句励志短句霸气,超励志的语录
25句励志短句霸气,超励志的语录

一、在人生的道路上,从来没有全身而退,坐享其成,不劳而获一说。你不努力,就得出局。二、单枪匹马你别怕,一腔孤勇又如何,这一路你可以哭,但不能怂,你总得熬过无人问津的日子,才能迎来掌声和鲜花。三、用自己的努力换取成功,然后成功就会像一个大巴掌...

30句至理名言,句句都非常经典
30句至理名言,句句都非常经典

1、命里有时终须有,命里无时莫强求。谋事在人,成事在天。很多事情是人力不能勉强的,随缘就好。2、忍得一时之气,免得百日之忧。在情绪冲动的情况下,做出的决策伤人伤己,总是让人追悔莫及。能忍住自己的脾气,是一种修养,更是一种能力。3、是非终日有...

100句非常经典的人生励志语录分享
100句非常经典的人生励志语录分享

1、不要皱眉,即使在伤心的时刻,因为你从不知道有谁会醉心于你的笑容。2、失去只是一种姿势,得到并不等同于幸福。3、真理和美女都是赤裸裸的。4、我们看错了这个世界,却说世界欺骗了我们。5、我们人这一辈子不是别人的楷模,就是别人的借鉴。6、千万...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。