文章目录

前言

一、环境搭建

二、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. python moviepy textclip中文_用Python玩转视频剪辑,秀的飞起!
  2. golang float64 保留2位小数
  3. mysql 普通索引使用方法,Mysql索引类型与基本用法实例分析
  4. c++ 字符串数组长度排序_数组 | 后缀数组的求法及应用
  5. 100个程序员学习的网站
  6. HDU4267(2012年长春站)
  7. android emmc 命令,使用CoreELEC的ceemmc工具将系统写入emmc
  8. C 实现 删除字符串空白符的函数 strtrim
  9. LeetCode 637. Average of Levels in Binary Tree
  10. Java实现计算饮料价格GUI版(入门)
  11. 成立了汽车与智能出行事业部的阿里云,如何建立云上行业生态?
  12. 【渝粤教育】国家开放大学2018年秋季 0242-21T机械制图 参考试题
  13. warning: malformed '#pragma pack(pop[, id])' - ignored
  14. 抓包工具tcpdump的使用总结(持续更新)
  15. MyBatis源码阅读(八) --- Executor执行器
  16. Java学习思维导图整理
  17. 语音混响制作matlab,1 语音信号的延时和混响 1)利用Windows下的录音机或其他软件,录制一段自己的 matlab 238万源代码下载- www.pudn.com...
  18. nRF52笔记(5)sniffer 抓包
  19. JVM 宋红康版 : JVM与Java体系结构
  20. javascript(一)

热门文章

  1. linux 服务重启失败,Linux 重启network 失败的解决办法
  2. 蓝牙协议(1)-- 基本协议
  3. pycharm中快速批量对齐快捷键和代码排版的快捷键
  4. Edge 浏览器闪屏问题只需一招
  5. Mars3d从菜鸟到大神的超级捷径
  6. Retinoic acid PEG Mal,RA-PEG-Maleimide,维甲酸PEG马来酰亚胺,聚乙二醇化视黄酸提供更好的水溶性
  7. 黑色沙漠手游台服最新服务器,黑色沙漠mobile台服官网
  8. vivo手机里的便签一不小心删掉了,怎么找回
  9. postgres字符串转数字
  10. 已知直线上两点求其一般式