如何在App中實現IM功能之五快速實現圖片接收和發送——箭扣科技Arrownock

來源:互聯網
上載者:User

標籤: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.