如何在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功能系列文章:
之一離線消息常見淺析
之二快速實現離線消息模塊
之三快速實現離線消息推送模塊
之四創建穩健的消息發送模塊
之五快速實現圖片接收和發送
之六快速實現羣聊的高級功能
之七快速實現聊天列表排序模塊