Android进阶之旅(第1天:后台相机)

这篇具有很好参考价值的文章主要介绍了Android进阶之旅(第1天:后台相机)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        一转眼一天就过去了,不过我今天是全神贯注的努力了一天,收获只能说颇丰

        先回顾下昨天的目标:10:53关手机睡觉(甚至还关了11点的闹钟)

        尝试改毕设bug,gradle有问题,没有正常运行,就没改

        Camera只是看了看,只能说看了一点点

        不管怎么说,昨天也仅仅是序言,今天确实是正儿八经的努力了一天

        首先总结下成果:

        1.解决了CameraX进入后台相机就会自动关闭的bug

        2.实现了前台Camera监听按键,后台Camera监听音量进行拍摄

        3.找老大展示了一下成果,制定了一下下阶段目标

        当然这是成果,接下来是学习到的知识

        首先是早上,看了CameraX文档和Camera2的文档(就是官方文档),以及理解了两张图:

Android进阶之旅(第1天:后台相机),Android,android,kotlin

Android进阶之旅(第1天:后台相机),Android,android,kotlin

(图来自:Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能 - 简书)

核心是CameraX文档,第一点就是知道了进入后台相机会关掉的原因:

Android进阶之旅(第1天:后台相机),Android,android,kotlin

还有就是知道了官方的引导文档的实现逻辑:

官方教程:https://developers.google.com/codelabs/camerax-getting-started?hl=zh-cn#3

也就是CameraX可以通过Provider和Controller来实现:

Android进阶之旅(第1天:后台相机),Android,android,kotlin

Android进阶之旅(第1天:后台相机),Android,android,kotlin

(这俩图来自谷歌官方文档的截图:https://developer.android.com/media/camera/camerax/architecture)

        我向来是上午搞理论和理解,下午搞实践

        下午首先根据需要LifeCycleOwner的bindToLifeCycle来研究

        首先搞懂了bind方法的usercase参数的含义以及如何使用:

        核心就是单个功能可以单独使用,组合功能需要实现满足要求:

Android进阶之旅(第1天:后台相机),Android,android,kotlin(图片来自与上文一致的Google文档)

还理解了一下Camera2与CameraX的区别(我的理解是,X是2的儿子,从2封装出来,比他爹更优秀,他爹实现的他也可以实现(不敢打包票,只是我这样理解)):

Android进阶之旅(第1天:后台相机),Android,android,kotlin

上面都是根据文档看懂学会了啥(其实感觉我说的这些就是架构这里的东西,你看完我说的就看完了这篇文档(我这是不是改名带你一天看一篇Google文档好一点哈哈哈))

        接下来来点硬货,也就是今天核心,bindToLifeCycle的lifecycle如何实现Camera退到后台却不死亡

        首先我采用了文档中的自定义LifeCycle:

Android进阶之旅(第1天:后台相机),Android,android,kotlin

当然,肯定是没用的,然后我去看了LifecycleOwner,参照下面这个写的:

Android进阶之旅(第1天:后台相机),Android,android,kotlin

https://developer.android.com/topic/libraries/architecture/lifecycle#implementing-lco

还是没用,我就请教前辈,前辈认真听了我的问题,然后问我为什么控制LifeCycle可以实现后台就不挂掉照相机

我只能说,还好我好好看文档了,我巨自豪的向他展示了CameraX的文档,他成功被我说服,我只能说直接特别激动,有种自豪感

接着前辈带我看了相关的源码(我早上已经自己看过啦),然后也没有发现什么问题

但是,前辈不愧是前辈,一眼指出他继承的是Activity,并且解释AppcompatActivity自己处理了LifeCycle,让我换下试试

果然换成继承Activity就成功实现了,但是,MaterialDesign的Button就g了,所以我就求助另一位前辈,果然,这位前辈帮我分析了一下,告诉我不需要自己重写LifeCycle,只需要自定义一个lifeCycleOwner就行了,但是这个方案我尝试过没有成功,于是我复现了一下让他帮我看

果然一出手直击要害(其实我最开始以为他说的不对哈哈哈),前辈指出(其实是我问的),如何实现各种生命周期下控制Camera的自定义LifeCycle生命周期,用这个:

activity.registerActivityLifecycleCallbacks

但是这个爆Q以上才能用,于是加个else:

activity.lifecycle.addObserver(object : LifecycleEventObserver

然后我加上完并没有打日志,看了半天不知道问题在哪,结果我退了一下后台,预期的日志成功打印,终于把我心头之患解决了

上面这些搞懂了,剩下来就是洒洒水了(其实还是很难)

接下来我解决了Camera前台退出直接关闭,之前做好的音量监听没法正常回调,还有第一次权限异常等bug,但是我通过注解之前代码,问gpt等方法自己解决了,真是收获满满的一天

那么今天的收获就分享到这里,预定下明天计划:

1.尝试修复二次进入前台黑屏的bug

2.看前台服务如何实现(这个估计要很久时间,毕竟之前没搞懂算是)

3.给前辈帮点能帮的忙

4.上面几个进行完了或者写吐了就去看下之前毕设遗留的bug(快要去见老师咯)

此外常驻项目11点睡觉,8点下班和每天锻炼,我甚至中午还冥想了(应该算是放空脑袋,冥想到睡着了)

现在是19:32,写完文章再学会就下班啦

那么明天见,祝大家也能收获满满!文章来源地址https://www.toymoban.com/news/detail-832682.html

到了这里,关于Android进阶之旅(第1天:后台相机)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 开启Android学习之旅-1

    最近在学习《第一行代码 Android》,两天看书把所有代码都敲了一遍。由于之前没有接触过 Kotlin,导致了囫囵吞枣,跟着书会敲,离开就忘了。Android 大佬开发的各种框架、控件好像大部分都用了 Kotlin。看他们的源码,理解起来很困难。所以好记性不如烂笔头,还是得整理笔

    2024年01月22日
    浏览(44)
  • Android初学之android studio运行java/kotlin程序

    第一步骤: File — New — New Module ,然后弹出一个框,(左边)选择 Java or Kotlin Library ,(右边)编辑自己的图书馆名、包名、类名,选择 Java 一个语言,然后 Finish 如下图: 然后,就可以看见我新建的 java Library 了,如下图: 第二步骤:马上写个测试程序 看看能不能运行

    2024年02月11日
    浏览(55)
  • Android---Kotlin 学习009

    在 java 里如果一个类没有被 final 修饰,那么它都是可以被继承的。而在 kotlin 中,类默认都是封闭的,要让某个类开放继承,必须使用 open 修饰它,否则会编译报错。此外在子类中,如果要复写父类的某个方法,需要用到 Override (在 kt 中就不是注解了)

    2024年02月01日
    浏览(45)
  • 开启Android学习之旅-5-Activity全屏

    Android 两种方式设置全屏: 通过 getWindow().getDecorView()方法拿到当前Activity的DecorView,再调用 setSystemUiVisibility() 方法来改变系统UI的显示,这里传入了 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 和 View.SYSTEM_UI_FLAG_LAYOUT_STABLE, 表示 Activity 的布局会显示再状态栏上面,最后调用一下 setStatusBarColo

    2024年02月02日
    浏览(43)
  • Android Kotlin 协程初探

    维基百科:协程,英文Coroutine [kəru’tin] (可入厅),是计算机程序的一类组件,推广了协作式多任务的子程序,允许执行被挂起与被恢复。 作为Google钦定的Android开发首选语言Kotlin,协程并不是 Kotlin 提出来的新概念,目前有协程概念的编程语言有Lua语言、Python语言、Go语言

    2024年02月08日
    浏览(45)
  • Kotlin 轻量级Android开发

    Kotlin 是一门运行在 JVM 之上的语言。 它由 Jetbrains 创建,而 Jetbrains 则是诸多强大的工具(如知名的 Java IDE IntelliJ IDEA )背后的公司。 Kotlin 是一门非常简单的语言,其主要目标之一就是提供强大语言的同时又保持简单且精简的语法。 其主要特性如下所示: 轻量级:这一点对

    2024年02月07日
    浏览(161)
  • Android Glide CustomTarget ,kotlin

    Android Glide CustomTarget ,kotlin       android Glide CustomViewTarget,java_zhangphil的博客-CSDN博客 【代码】android Glide CustomViewTarget,java。 https://blog.csdn.net/zhangphil/article/details/129493334 Android Glide预加载preload ,kotlin_zhangphil的博客-CSDN博客 【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然G

    2024年02月16日
    浏览(45)
  • Android-实现一个登录页面(kotlin)

    首先,确保你已经安装了 Android Studio。如果还没有安装,请访问 Android Studio 官网 下载并安装。 - 安装并配置好 Android Studio gradle-wrapper.properties build.gradle(:Project) setting.gradle - 对 Kotlin 语言有基本了解 首先,打开 Android Studio 并创建一个新项目。选择 \\\"Empty Activity\\\" 模板,然后为项

    2023年04月25日
    浏览(43)
  • android 自定义车牌键盘(kotlin)

    平时停车缴费都要填车牌号码,就想着自己能不能也做个车牌键盘demo。 自定义车牌键盘能满足(普通车牌,新能源,警车,军车,领事馆车,教练车以及特种车辆等车牌) 1、车牌前两位默认是:粤A 2、第一个控件,默认是省份键盘 3、剩下控件,默认是abc键盘 4、当前输入

    2024年02月16日
    浏览(45)
  • Android AlertDialog setView,kotlin

    Android AlertDialog setView,kotlin             Android DialogFragment(1)_zhangphil的博客-CSDN博客 Android DialogFragment(1)和过去的AlertDialog类似,Android引入的DialogFragment旨在为开发者提供一个“富”dialog,而不必受到过去Android AlertDialog的局限。首先,DialogFragment是一个Fragment,它有Fragm

    2024年02月13日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包