Android4.0 Message 中添加附件
2016-05-05 17:18
627 查看
一,基本情况
不说废话,先直接上图,大致情况就是,在一则New Message中添加一些附件(图片,视频,声音等)和信息一起发送,如下图;
二,基本思路
其实,这就类似于我们的拍照上传,是采用一样的处理方法,这里选择临时拍一张照片作为一起发送的附件,即上图中的Capture Picture。主要步骤:
1)点击Capture Picture时,会启动系统Camera应用程序来拍照;主要使用startActivityForResult(Intent intent, int requestCode)方法来启动Camera程序;
2)拍摄照片;这里就是用Camera进行拍照,这里不做介绍;
3)保存照片,并将照片数据返回给Message应用;主要用到一个setResult(int resultCode, Intent intent)方法,返回到原调用程序,关闭Camera;
4)在Message应用中处理返回的数据;重写onActivityResult(int requestCode, int resultCode, Intent data)方法来处理返回的数据;
三,具体流程
首先,我们已经启动Message-->New Message-->Attachment,在Message主活动ComposeMessageActivity中有一个addAttachment()方法来实现为新信息添加附件;
?
新建一个 MediaStore.ACTION_IMAGE_CAPTURE 意图的Intent,ACTION_IMAGE_CAPTURE 的定义为"android.media.action.IMAGE_CAPTURE",这就时告诉系统,要进行抓取图片,调用startActivityForResult()启动Camera。
在Camera中会进行正常的onCreate()-->Open Camera-->Preview,在此处会有一个不同之处,
?
?
从上面代码可以看出,Camera会判断当前的action,若为ACTION_IMAGE_CAPTURE,isImageCaptureIntent()会返回true,这时显示的界面也会有所不同。
接下来就是Shutter键进行拍照,都知道正常拍照后会回到PictureCallback中的onPictureTaken()方法,再次Preview,保存图片等一些事务处理,而在这里也会回到onPictureTaken(),但有一些不同,不再Preview,而是停留在拍照的画面;
?
?
从前面我们已经知道mIsImageCaptureIntent()返回true,取反则代码会直接运行else语句,这时我们来到showPostCaptureAlert()方法,onCreate方法中mQuickCapture默认会是false。
?
到这里,我们还是会看到mIsImageCaptureIntent,看来 mIsImageCaptureIntent始终贯彻整个过程,时我们区别正常Camera拍照的根本所在,在showPostCaptureAlert()中将我们的Shutter键改成R.id.btn_retake,另外新加一个R.id.btn_done,这是一个选择当前照片的ImageButton,其布局文件xml中配置了一个点击方法android:onClick="onReviewDoneClicked";
?
其实,不只是btn_done,其他的两个按钮btn_retake,btn_cacel都配置了相应的点击方法,所以我们最终还是回到了doAttach()方法,仔细的人会发现这个方法我们之前看到过。
?
?
mCropValue为null,至于mSaveUri在onCreate()方法中会调用一个setupCaptureParams()方法,取得Uri;这时会执行setResultEx(RESULT_OK),并调用
finish()关闭Camera。
?
setResult()方法终于出现了,至此,Camera的功能已经完成。
然后,我们继续回到ComposeMessageActivity,来到onActivityResult();
?
再次switch (requestCode),case REQUEST_CODE_TAKE_PICTURE,这也是我们最初startActivityForResult()中发送的参数,最终回到Capture Picture的处理:
1) TempFileProvider.getScrapPath(this)获取媒体文件的路径,我打印了绝对路径,一看结果我想大家都懂了,这是一个系统隐藏文件.temp.jpg:
/mnt/sdcard/Android/data/com.android.mms/cache/.temp.jpg;
2)调用addImageAsync(uri, false)方法异步加载图片到Message。
不说废话,先直接上图,大致情况就是,在一则New Message中添加一些附件(图片,视频,声音等)和信息一起发送,如下图;
二,基本思路
其实,这就类似于我们的拍照上传,是采用一样的处理方法,这里选择临时拍一张照片作为一起发送的附件,即上图中的Capture Picture。主要步骤:
1)点击Capture Picture时,会启动系统Camera应用程序来拍照;主要使用startActivityForResult(Intent intent, int requestCode)方法来启动Camera程序;
2)拍摄照片;这里就是用Camera进行拍照,这里不做介绍;
3)保存照片,并将照片数据返回给Message应用;主要用到一个setResult(int resultCode, Intent intent)方法,返回到原调用程序,关闭Camera;
4)在Message应用中处理返回的数据;重写onActivityResult(int requestCode, int resultCode, Intent data)方法来处理返回的数据;
三,具体流程
首先,我们已经启动Message-->New Message-->Attachment,在Message主活动ComposeMessageActivity中有一个addAttachment()方法来实现为新信息添加附件;
?
在Camera中会进行正常的onCreate()-->Open Camera-->Preview,在此处会有一个不同之处,
?
接下来就是Shutter键进行拍照,都知道正常拍照后会回到PictureCallback中的onPictureTaken()方法,再次Preview,保存图片等一些事务处理,而在这里也会回到onPictureTaken(),但有一些不同,不再Preview,而是停留在拍照的画面;
?
?
?
?
finish()关闭Camera。
?
然后,我们继续回到ComposeMessageActivity,来到onActivityResult();
?
1) TempFileProvider.getScrapPath(this)获取媒体文件的路径,我打印了绝对路径,一看结果我想大家都懂了,这是一个系统隐藏文件.temp.jpg:
/mnt/sdcard/Android/data/com.android.mms/cache/.temp.jpg;
2)调用addImageAsync(uri, false)方法异步加载图片到Message。
相关文章推荐
- SIM结构模型(Logical model of SIM)
- Android中的Audio播放:控制Audio输出通道切换
- Android实现国际化
- Android ListView 中的CheckBox点击乱系
- Android Volley完全解析(一),初识Volley的基本用法
- android 中aidl
- Android挂断电话以及Java Class Loader
- Android Activity启动流程(三)–Activity启动相关类的类图
- android开发数据储存的路径示例
- 在Android中通过Intent使用Bundle传递对象
- android中SQLite实现
- Android自定义View解析之View的绘制流程(一)
- Android Sqlite SQLiteOpenHelper建立数据库
- Android Studio 获取数字签名
- 浅谈Android事件分发机制(一)点击事件的传递规则
- 一步一步带你实现ListView动画展开布局, ExpandableLayout实现
- Android事件分发机制浅析
- android工厂类
- Android 混淆后在友盟中无定位错误位置 Unknown Source
- Android Studio开发入门-引用jar及so文件