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