標籤:小技巧 離線 如何 記錄 前台
如何在App中實現IM功能之二快速實現離線訊息模組
一個App在實際使用聊天功能的時候,並非是一直呆在一個介面的,在等待好友發訊息來的同時,有可能已經跳轉到其他介面,也有可能切換到其他App。
在當前的App進入後台、好友發來訊息時,需要給裝置推送一條訊息。以安卓為例,收取離線訊息通知需要綁定anPush,具體做法是調用anIM.bindAnPushService(anID, AppKey, anPushType)。
在App進入後台時,調用anIM.disconnect();在App回到前台時,調用anIM.connect()。 但是,如果在每一個Activity中都寫這句話來實現收取離線功能,就太複雜了。
下面介紹一個統一系統管理使用者離線訊息的接收的小技巧:
步驟一
建立BaseActivity,其後所有的Activity都繼承BaseActivity。
步驟二
在BaseActivity建立一個全域變數isActive為true,用來記錄當前介面是否進入後台。
步驟三
當App進入後台時,在onStop生命週期的方法中寫:
@Override protected void onStop() { super.onStop(); // APP進入後台 if (!isAppOnForeground()) { try { anIM.disconnect(); } catch (ArrownockException e) { e.printStackTrace(); } // 全域變數isActive = false 記錄當前已經進入後台 isActive = false; } }
步驟四
當App重新回到前台,在onResume方法中寫:
@Override protected void onResume() { super.onResume(); // APP從後台喚醒,進入前台 if (!isActive) { try { anIM.connect(clientId); } catch (ArrownockException e) { e.printStackTrace(); } isActive = true; } }
步驟五
判斷程式是否在前台啟動並執行方法:
//在進程中去尋找當前APP的資訊,判斷是否在前台運行 private boolean isAppOnForeground() { ActivityManager activityManager =(ActivityManager) getApplicationContext() .getSystemService(Context.ACTIVITY_SERVICE); String packageName =getApplicationContext().getPackageName(); List<RunningAppProcessInfo>appProcesses = activityManager.getRunningAppProcesses(); if (appProcesses == null) { return false; } for (RunningAppProcessInfo appProcess : appProcesses) { if (appProcess.processName.equals(packageName) && appProcess.importance == RunningAppProcessInfo .IMPORTANCE_FOREGROUND) { return true; } } return false; }
如何在App中實現IM功能系列文章:
之一離線訊息常見淺析
之二快速實現離線訊息模組
之三快速實現離線訊息推送模組
之四建立穩健的訊息發送模組
之五快速實現圖片接收和發送
之六快速實現群聊的進階功能
之七快速實現聊天列表排序模組
本文出自 “箭扣科技Arrownock” 部落格,轉載請與作者聯絡!
如何在App中實現IM功能之二快速實現離線訊息模組——箭扣科技Arrownock