最近自己琢磨开发一个个人应用,主要功能是管理个人的私密文件、照片、视频文件(你懂的),每个人的手机里都有一些不想被他人窥视的图片或视频文件吧,想必这种应用还是有需求的。
起初规划了一下应用,设计了五个主要的功能模块:登录模块、文档管理、图片管理、视频管理、关于我们。既然规划好了功能模块,那咱就开始动手吧。由于没有复杂的权限设计,登录模块的逻辑还是挺简单的:一个登录的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文件中实现啦:
好了,这个问题解决了