五.拍照存储相片过程分析


一,时序图




二、过程说明

   初始化过程不详细介绍。可以根据上述时序图进行分析。详细介绍拍照过程。

   1、点击拍照按钮,拍照按钮是ShutterButton类的实例。点击后,调用performClick方法。在这个方法里面,有语句mListener.onShutterButtonClick();。其中mListener 是PhotoController的实例,也就是在PhotoUI类里面的创建的PhotoController的对象mController。mController的实例,其实是通过PhotoModule 的 init方法里面的mUI = new PhotoUI(activity, this, parent);语句,调用PhotoUI构造函数。第二个参数就是传给mController的值,就是PhotoModule的实例。所以mListener.onShutterButtonClick();就是调用PhotoModule的onShutterButtonClick方法。

   2、在onShutterButtonClick方法里,执行mFocusManager.doSnap();语句,调用FocusOverlayManager的doSnap方法。然后再调用capture方法。再调用PhotoModule方法的capture方法。在这个方法里,执行语句

       mCameraDevice.takePicture(mHandler,

                newShutterCallback(!animateBefore),

                mRawPictureCallback,mPostViewPictureCallback,

                new JpegPictureCallback(loc));

分析得知,拍照后回调JpegPictureCallback 类的onPictureTaken方法。在这个方法里,有语句

                            mActivity.getMediaSaveService().addImage(

                            jpegData, title, date,mLocation, width, height,

                            orientation, exif,mOnMediaSavedListener, mContentResolver);

           其中mActivity.getMediaSaveService()获取的是MediaSaveService的对象。调用MediaSaveService的addImage方法。其中语句

       ImageSaveTask t = new ImageSaveTask(data, title, date,

                (loc == null) ? null : newLocation(loc),

                width, height, orientation,exif, resolver, l);

                   当执行t.execute();的时候,执行ImageSaveTask类的doInBackground方法。在这个方法里,调用Storage.addImage(resolver, title, date, loc, orientation, exif,data, width, height);语句。然后调用  Storage 类的

        writeFile(path, jpeg);来存储拍的照片。

   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值