android--调用系统相机拍照,显示并保存照片 - zhengwen
2015-12-17 21:20
901 查看
http://www.tuicool.com/articles/nYFZnu
最近自己琢磨开发一个个人应用,主要功能是管理个人的私密文件、照片、视频文件(你懂的),每个人的手机里都有一些不想被他人窥视的图片或视频文件吧,想必这种应用还是有需求的。
起初规划了一下应用,设计了五个主要的功能模块:登录模块、文档管理、图片管理、视频管理、关于我们。既然规划好了功能模块,那咱就开始动手吧。由于没有复杂的权限设计,登录模块的逻辑还是挺简单的:一个登录的Activity,对应一个登录UI的xml文件,UI中设计一个密码框加之登录按钮、设置密码按钮和退出按钮,这样UI算是设计完成了。在Activity中通过R.id拿到各个按钮,分别添加监听事件。首次登录时用SharedPreference保存用户密码,以后登录就可以从SharedPreference中取出密码进行比对。这个模块进行的还算顺利,就不详细说明了。
进行到图片管理模块后第一个问题出现了:如何调用系统相机拍照然后显示所拍的照片并且保存到自己的应用中。
不说多了,直接上实例。
1.首先需要一个UI和一个对应的Activity。先看UI
需要一个拍照按钮,一个imageView用于显示拍摄的照片,一个确认添加按钮用于保存照片。
2.调用系统相机的代码
这个方法是在拍照按钮的监听事件里调用的:
3.以上的代码可以实现打开系统照相机,并进行拍照。但是要想拿到所拍摄的照片还要在activity中重写onActivityResult()方法,在这个方法中接收到相机拍摄的照片文件的Bitmap,然后设置显示到imageView上。
4.至此,实现了调用系统相机拍照并,显示照片,还有最关键的的一步,存储照片。存储照片首先涉及到给照片命名的问题,照片的名字要不能重复,因此最合适的命名规则就是用时间命名啦,因为时间就像流水一样,时间永远不会重复啦,正所谓人不可能两次踏入同一条河流,上过马克思的同学应该听过这句话,扯远了。总之用时间给照片命名不会造成重复啦。事实上手机的系统相册中的照片就是采用的时间命名规则。话又说回来了,怎样用系统的事件来创建一个文件名呢?看代码:
实际上,就是先拿到系统当前时间,然后用SimpleDateFormat创建一个时间格式,然后把给它加上.jpg后缀就行啦。
创建好了图片的名称,并且在OnActivityResult()中拿到了图片的Bitmap,有了这两个东西就可以进行存储了。存储的代码如下:
上面这段代码就实现了存储图片到你想要的人和路径下,至于在哪里调用,当然是在用户点击确认添加按钮的时候啦。在确认添加按钮的监听事件里调用啊。
至此关于拍照显示并保存的业务逻辑已经实现,剩下就是申请使用相机和存储的权限了,这要在项目的Manifest.xml文件中实现啦:
好了,这个问题解决了
最近自己琢磨开发一个个人应用,主要功能是管理个人的私密文件、照片、视频文件(你懂的),每个人的手机里都有一些不想被他人窥视的图片或视频文件吧,想必这种应用还是有需求的。
起初规划了一下应用,设计了五个主要的功能模块:登录模块、文档管理、图片管理、视频管理、关于我们。既然规划好了功能模块,那咱就开始动手吧。由于没有复杂的权限设计,登录模块的逻辑还是挺简单的:一个登录的Activity,对应一个登录UI的xml文件,UI中设计一个密码框加之登录按钮、设置密码按钮和退出按钮,这样UI算是设计完成了。在Activity中通过R.id拿到各个按钮,分别添加监听事件。首次登录时用SharedPreference保存用户密码,以后登录就可以从SharedPreference中取出密码进行比对。这个模块进行的还算顺利,就不详细说明了。
进行到图片管理模块后第一个问题出现了:如何调用系统相机拍照然后显示所拍的照片并且保存到自己的应用中。
不说多了,直接上实例。
1.首先需要一个UI和一个对应的Activity。先看UI
需要一个拍照按钮,一个imageView用于显示拍摄的照片,一个确认添加按钮用于保存照片。
2.调用系统相机的代码
这个方法是在拍照按钮的监听事件里调用的:
3.以上的代码可以实现打开系统照相机,并进行拍照。但是要想拿到所拍摄的照片还要在activity中重写onActivityResult()方法,在这个方法中接收到相机拍摄的照片文件的Bitmap,然后设置显示到imageView上。
4.至此,实现了调用系统相机拍照并,显示照片,还有最关键的的一步,存储照片。存储照片首先涉及到给照片命名的问题,照片的名字要不能重复,因此最合适的命名规则就是用时间命名啦,因为时间就像流水一样,时间永远不会重复啦,正所谓人不可能两次踏入同一条河流,上过马克思的同学应该听过这句话,扯远了。总之用时间给照片命名不会造成重复啦。事实上手机的系统相册中的照片就是采用的时间命名规则。话又说回来了,怎样用系统的事件来创建一个文件名呢?看代码:
实际上,就是先拿到系统当前时间,然后用SimpleDateFormat创建一个时间格式,然后把给它加上.jpg后缀就行啦。
创建好了图片的名称,并且在OnActivityResult()中拿到了图片的Bitmap,有了这两个东西就可以进行存储了。存储的代码如下:
上面这段代码就实现了存储图片到你想要的人和路径下,至于在哪里调用,当然是在用户点击确认添加按钮的时候啦。在确认添加按钮的监听事件里调用啊。
至此关于拍照显示并保存的业务逻辑已经实现,剩下就是申请使用相机和存储的权限了,这要在项目的Manifest.xml文件中实现啦:
好了,这个问题解决了
相关文章推荐
- Android高效率编码-细节,控件,架包,功能,工具,开源汇总,你想要的这里都有
- Android中JNI的使用方法
- Android 判断当前网络状态
- Android AsyncTask onProgressUpdate 方法的些许研究
- Android之取消ViewPage+Fragment的预加载
- 【Android图片加载框架】制作自己的图片加载框架
- Android学习之核心组件Activity的生命周期
- Android5.0新组件TabLayout+ViewPager实现Tab页面
- android运行错误
- Android读书笔记之自定义RecyclerView列表项
- Textview转化成Bitmap对象
- 【android】SQLite数据库的创建和操作、SQLite数据库可视化
- Android框架 -- GreenDao
- Android帧动画Drawable Animation
- 使用GDB调试Android应用中C/C++代码
- 使用GDB调试Android应用中C/C++代码
- Android5.0以后版本把应用移动到SD或者TF卡的方法
- Android Studio 好用的插件,这些基本是测试过好用的,或者我想用的~
- Android Bitmap OutOfMemory 解决的方法
- Android的图片压缩类ThumbnailUtils