码迷,mamicode.com
首页 > 移动开发 > 详细

如何在App中实现IM功能之五快速实现图片接收和发送——箭扣科技Arrownock

时间:2015-12-02 14:46:02      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:android   数据库   二进制   图片   photo   

如何在App中实现IM功能

之五

快速实现图片接收和发送

 

社交App中,用户聊天发送或接收图片,是一个非常常见的场景,这里给大家介绍如何利用Arrownock的anSocial的Photo API与anIM结合,来实现发送和接收图片。

 

发送端详情

当发送方选择好图片点击发送时,为了不影响用户聊天过程中的体验,我们一般会将消息先插入到sqlite数据库中,刷新界面,给这条消息加上Loading动画,表示发送中。而这背后的操作为了能够节省流量的消耗,开发时因为图片往往比较大,所以并不是直接将图片的二进制数据传输过去,而是先将图片压缩一下,再传输过去。

 

具体实现方式

anSocial的Photo API已经提供了多种任意压缩的尺寸,以Android开发为例,可以这么调用:


    //组装上传创建且压缩photo的数据
    Map<String, Object> params = new HashMap<String, Object>();
    InputStream inputStream = context.getResources().getAssets().open("testPhoto.png");
    //上传文件时需要使用AnSocialFile
    AnSocialFile file = new AnSocialFile("testPhoto.jpg", inputStream);
    params.put("photo", file);
    //组装想要压缩的尺寸
    Map<String, String> resolutions = new HashMap<String,String>();
    resolutions.put("small", "200x200");
    resolutions.put("middle", "400x400");
    params.put("resolutions", resolutions);

    try {
        //调用createPhoto API 上传图片
        anSocial.sendRequest("photos/create.json", AnSocialMethod.POST, 
            params, new IAnSocialCallback() {
            @Override
            public void onSuccess(JSONObject response) {
                try {
                    //上传图片成功后,根据返回的数据拿到原图的url,中等图,小图
                    JSONObject photo =response.getJSONObject("response")
                        .getJSONObject("photo");
                    String fileUrl =photo.getString("url");
                    String smallPhotoPath =photo.getJSONObject("resolutions")
                        .getString("small");
                    String middlePhotoPath= photo.getJSONObject("resolutions")
                        .getString("middle");
                    //组装原图,中等图,小图的url
                    Map<String, String>customMap = new HashMap<String,String>();
                    customMap.put("smallPhotoPath", smallPhotoPath);
                    customMap.put("middlePhotoPath", middlePhotoPath);
                    customMap.put("url", fileUrl);
                    //因为已经图片已经上传到服务器,所以聊天消息可以只发送一个空数组
                    byte[] b = new byte[1];
                    //调用anIM的sendBinary方法
                    anIM.sendBinary(clientId,b, "image", customMap);
                } catch (JSONException e) {
                }
            }
            @Override
            public void onFailure(JSONObject arg0) {
            }
        });
    } catch (ArrownockException e) {
    }



从上面的代码里可以看到,发送聊天消息时,只发送了图片地址。 在发送消息成功后,再刷新界面,将Loading动画去掉。

 

接收端详情:

接收方拿到消息时,从customData中可以根据设备的不同,屏幕大小的不同来获取不同的图片尺寸并展示到界面中。只有当用户点击图片时,才会跳转到一个展示图片的新界面中加载原图。

 

如何在App中实现IM功能系列文章:


之一离线消息常见浅析

之二快速实现离线消息模块

之三快速实现离线消息推送模块

之四创建稳健的消息发送模块

之五快速实现图片接收和发送

之六快速实现群聊的高级功能

之七快速实现聊天列表排序模块



本文出自 “箭扣科技Arrownock” 博客,转载请与作者联系!

如何在App中实现IM功能之五快速实现图片接收和发送——箭扣科技Arrownock

标签:android   数据库   二进制   图片   photo   

原文地址:http://arrownock.blog.51cto.com/10638334/1718800

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!