文章目录

前言

一、环境搭建

二、Demo开发

1.参考

2.编译

1.androidx编译不过

2.增加R.id.textview和R.id.button

3.安装

4.运行

1.增加相机使用权限

2.增加存储读写权限

3.图片保存

5.后续


前言

之前一直研究相机Framework和HAL的代码,对相机应用这块感觉有点缺失,写一个简单的demo应该也不难,动手开干

一、环境搭建

往回翻了下历史博客中,当时有记录使用Eclipse开发应用的记录,但看完之后各种软件下载安装等特别复杂,于是网上又搜索了下,找到了一个介绍非常详细和简单的开发指导:使用AndroidStudio,参考:android studio安装教程(包安装成功,不成功你找我)_急递客的博客-CSDN博客_安卓studio

考虑到自己手机的Android版本,选择了API Level 28,模拟器Android Virtual Device(AVD)不知道什么原因没有安装成功,也没继续研究,直接用自己的手机调。

二、Demo开发

1.参考

深入理解Android相机体系结构之三_xiaozi63的博客-CSDN博客_android oncompleted

这篇文章在介绍TextureView和ImageReader等是非常准确的,里面也给了一个简单的demo实例代码,代码也是非常具有参考意义的,涉及预览、拍照,就来调它了。

2.编译

1.androidx编译不过

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

这里面使用到了androidx,这应该是更高的版本,也没解决(其实也不想投入过多精力去解决,因为应用毕竟不是自己的重点),使用低版本的库提替代即可

import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.annotation.NonNull;

替换之后,解决其他编译问题:比如使用ContextCompat替换ActivityCompat等

2.增加R.id.textview和R.id.button

这个应该是在activity_main.xml增加控件,随便找个模板加上即可

<TextureViewandroid:id="@+id/textview"android:layout_width="match_parent"android:layout_height="match_parent"/>
<Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:layout_marginBottom="50dp"/>

3.安装

点击“Run App”之后开始在手机上install,install之后第一次安装成功,但卸载之后再次install的话显示安装成功,但在手机上也没找到。Terminal上显示的错误是“Activity class {package/class} does not exist ”,参考Activity class {package/class} does not exist原因及解决方法_程序猿秃头之路的博客-CSDN博客

通过手动adb uninstall解决

4.运行

1.增加相机使用权限

打开app,直接奔溃退出,抓log,显示“"com.example.administrator.myapplication" (PID 10277, UID 29529) cannot open camera "0" without camera permission”

在AndroidManifest.xml里增加相机使用权限

<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.permission.camera"/>

2.增加存储读写权限

相机预览正常了,但是拍照挂掉,“AndroidRuntime: java.lang.IllegalArgumentException: CaptureRequest contains unconfigured Input/Output Surface!”,想到拍照会去写文件操作,所以需要增加存储权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

3.图片保存

图片保存路径打印显示是/storage/emulated/0/photo-test.jpg,可以按照自己想要的路径去保存,但图库中不会立刻显示,过会时间才会显示,可以搜索下解决。

5.后续

1.setOnFrameAvailableListener

该Demo没有使用TextureView访问预览的数据,也就是要写一个setOnFrameAvailableListener这个可以继续增加相关代码验证

2.google 原生app

google原生app代码路径

将 Google Camera2 迁移为 Gradle 编译

3.SurfaceView和SurfaceTexture

一文了解surface,surfaceview,surfaceTexture,GLsurfaceView

像美图秀秀这种三方应用,需要通过surfacetexture获取buffer数据进行二次处理

如何写一个相机APP的demo相关推荐

  1. 手把手教你写一个Matlab App(一)

    对于传统工科的学生用的最多的编程软件应该就是matlab,其集成度高,计算能力强,容易上手,颇受大众青睐.今天挖的这个新坑,主要是分享用matlab app designer设计GUI界面的一些方法和 ...

  2. 手把手教你写一个安卓app

    最近有很多小伙伴在后台留言:Android Studio.我想大家是想写一个手机app,前面已经分享了在QT上如何写一个安卓蓝牙app,虽然qt可以做app,但是比起Android Studio还是差 ...

  3. 如何写一个安卓APP

    写一个安卓APP需要以下步骤: 首先确定你的APP要实现什么功能,明确需求. 然后准备好开发工具和环境.一般来说,安卓APP的开发工具为Android Studio,需要先下载并安装. 接着,学习Ja ...

  4. [Kotlin]手把手教你写一个安卓APP(第一章注册登录)

    1.创建项目默认选择Empty Activity                                                                      点击Next ...

  5. 如何用Python写一个安卓APP

    前言:用Python写安卓APP肯定不是最好的选择,但是肯定是一个很偷懒的选择,而且实在不想学习Java,再者,就编程而言已经会的就Python与Golang(注:Python,Golang水平都一般 ...

  6. python能开发安卓app吗_如何Python写一个安卓APP

    前言:用Python写安卓APP肯定不是最好的选择,但是肯定是一个很偷懒的选择,而且实在不想学习Java,再者,就编程而言已经会的就Python与Golang(注:Python,Golang水平都一般 ...

  7. 写一个简单的 django_post demo

    1.新建一个django工程,其路由为下图 2.要做的是一个 简单的登录请求,以表单形式提交,html 部分代码如下 这里注意action指向的是路由的地址,index1后的views.login部分 ...

  8. 写一个有app控制的自动开锁系统

    好的,我来为您解决这个问题. 首先,我们需要安装一个带有蓝牙功能的智能手机应用程序,这样就可以通过手机控制自动开锁系统. 其次,我们需要在门上安装一个带有蓝牙模块的自动开锁器.这样,当手机应用程序发出 ...

  9. electron 安装import_Electron: 从零开始写一个记事本app

    Electron介绍 简单来说,Electron就是可以让你用Javascript.HTML.CSS来编写运行于Windows.macOS.Linux系统之上的桌面应用的库.本文的目的是通过使用Ele ...

最新文章

  1. 开发工具之Eclipse快捷键
  2. 大脑认知能力获突破进展!《科学》发现促进大脑发育期间的关键细胞器
  3. JVM 垃圾回收器工作原理及使用实例介绍
  4. 应聘腾讯,面试官和我聊了一个小时的人生
  5. 【转摘留用】页面静态化..
  6. leetcode 572. 另一个树的子树(Java版)
  7. git remote: HTTP Basic: Access denied
  8. codeforces855 C. Helga Hufflepuff‘s Cup(树形dp)
  9. linux之睡眠函数(my_sleep)
  10. Grafana展示DNS解析延时
  11. 跨域解决方案CROS最简单演示——JSP演示示例
  12. CentOS上安装man手册
  13. glibc中malloc源码分析
  14. Python 实现PID控制一阶惯性系统
  15. 计算机休眠下睡眠的不同点是什么,电脑休眠和睡眠的区别是什么
  16. 百度地图 大头针设置本地图片与网络图片
  17. 2016年中考计算机考试模拟试题,2016年计算机三级考试模拟试题(含答案)
  18. 简单介绍一下v-if 的几种用法
  19. python接入萤石云HLS直播流(海康威视摄像头4g连接条件下)
  20. JAVA代码添加License

热门文章

  1. 新品发布:长条屏!广州大彩医用级3.7寸串口屏正式发布!
  2. 用友NC开发本地启动客户端时界面空白问题的解决
  3. set集合及(交集,差集,并集)计算
  4. Onedrive同步任意文件夹(Windows)
  5. Git安装教程超详细(Windows系统)
  6. java程序化交易软件_TradeApi为A股程序化交易接口2.9.0发布,支持2019年12月的交易客户端版本...
  7. 关于支付宝的免签支付技术
  8. 移动互联网时代:如何用手机精细化管理企业?
  9. 前端数据展示为符号∞等情况
  10. java有个策略龙蛋的什么游戏_我的世界龙蛋怎么孵化 龙蛋孵化详细攻略