diff --git a/cim-client-sdk-libs/android/cim-android-sdk-3.8.0.jar b/cim-client-sdk-libs/android/cim-android-sdk-3.8.2.jar similarity index 56% rename from cim-client-sdk-libs/android/cim-android-sdk-3.8.0.jar rename to cim-client-sdk-libs/android/cim-android-sdk-3.8.2.jar index 5de2b0f..4fac3c0 100644 Binary files a/cim-client-sdk-libs/android/cim-android-sdk-3.8.0.jar and b/cim-client-sdk-libs/android/cim-android-sdk-3.8.2.jar differ diff --git a/cim-client-sdk/cim-android-sdk/pom.xml b/cim-client-sdk/cim-android-sdk/pom.xml index 8a4da9e..0f5d3b1 100755 --- a/cim-client-sdk/cim-android-sdk/pom.xml +++ b/cim-client-sdk/cim-android-sdk/pom.xml @@ -6,7 +6,7 @@ com.farsunset cim-android-sdk - 3.8.1 + 3.8.2 jar diff --git a/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMListenerManager.java b/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMListenerManager.java index 1771b05..18a0df6 100644 --- a/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMListenerManager.java +++ b/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMListenerManager.java @@ -63,44 +63,55 @@ public class CIMListenerManager { } public static void notifyOnNetworkChanged(NetworkInfo info) { - for (CIMEventListener listener : cimListeners) { - listener.onNetworkChanged(info); + Iterator iterable = cimListeners.iterator(); + while (iterable.hasNext()) { + iterable.next().onNetworkChanged(info); } } public static void notifyOnConnectFinished(boolean hasAutoBind) { - for (CIMEventListener listener : cimListeners) { - listener.onConnectFinished(hasAutoBind); + Iterator iterable = cimListeners.iterator(); + while (iterable.hasNext()) { + iterable.next().onConnectFinished(hasAutoBind); } } public static void notifyOnMessageReceived(Message message) { - for (CIMEventListener listener : cimListeners) { - listener.onMessageReceived(message); + Iterator iterable = cimListeners.iterator(); + while (iterable.hasNext()) { + iterable.next().onMessageReceived(message); } } public static void notifyOnConnectionClosed() { - for (CIMEventListener listener : cimListeners) { - listener.onConnectionClosed(); + Iterator iterable = cimListeners.iterator(); + while (iterable.hasNext()) { + iterable.next().onConnectionClosed(); } } public static void notifyOnConnectFailed() { - for (CIMEventListener listener : cimListeners) { - listener.onConnectFailed(); + + Iterator iterable = cimListeners.iterator(); + while (iterable.hasNext()) { + iterable.next().onConnectFailed(); } + } public static void notifyOnReplyReceived(ReplyBody body) { - for (CIMEventListener listener : cimListeners) { - listener.onReplyReceived(body); + + Iterator iterable = cimListeners.iterator(); + while (iterable.hasNext()) { + iterable.next().onReplyReceived(body); } + } public static void notifyOnSendFinished(SentBody body) { - for (CIMEventListener listener : cimListeners) { - listener.onSendFinished(body); + Iterator iterable = cimListeners.iterator(); + while (iterable.hasNext()) { + iterable.next().onSendFinished(body); } } @@ -109,8 +120,9 @@ public class CIMListenerManager { } public static void logListenersName() { - for (CIMEventListener listener : cimListeners) { - Log.i(CIMEventListener.class.getSimpleName(), "#######" + listener.getClass().getName() + "#######"); + Iterator iterable = cimListeners.iterator(); + while (iterable.hasNext()) { + Log.i(CIMEventListener.class.getSimpleName(), "#######" + iterable.next().getClass().getName() + "#######"); } } diff --git a/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMPushManager.java b/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMPushManager.java index 04c8f08..20c0891 100644 --- a/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMPushManager.java +++ b/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMPushManager.java @@ -40,23 +40,24 @@ import java.util.UUID; */ public class CIMPushManager { - protected static final String ACTION_ACTIVATE_PUSH_SERVICE = "ACTION_ACTIVATE_PUSH_SERVICE"; protected static final String ACTION_CREATE_CIM_CONNECTION = "ACTION_CREATE_CIM_CONNECTION"; + protected static final String ACTION_DESTROY_CIM_SERVICE = "ACTION_DESTROY_CIM_SERVICE"; + + protected static final String ACTION_ACTIVATE_PUSH_SERVICE = "ACTION_ACTIVATE_PUSH_SERVICE"; + protected static final String ACTION_SEND_REQUEST_BODY = "ACTION_SEND_REQUEST_BODY"; protected static final String ACTION_CLOSE_CIM_CONNECTION = "ACTION_CLOSE_CIM_CONNECTION"; - protected static final String ACTION_DESTROY_CIM_SERVICE = "ACTION_DESTROY_CIM_SERVICE"; - protected static final String ACTION_SET_LOGGER_EATABLE = "ACTION_SET_LOGGER_EATABLE"; protected static final String ACTION_SHOW_PERSIST_NOTIFICATION = "ACTION_SHOW_PERSIST_NOTIFICATION"; protected static final String ACTION_HIDE_PERSIST_NOTIFICATION = "ACTION_HIDE_PERSIST_NOTIFICATION"; - protected static final String ACTION_SEND_PONG = "ACTION_SEND_PONG"; + protected static final String ACTION_CIM_CONNECTION_PONG = "ACTION_CIM_CONNECTION_PONG"; /** * 初始化,连接服务端,在程序启动页或者 在Application里调用 @@ -120,9 +121,10 @@ public class CIMPushManager { } public static void pong(Context context) { - Intent serviceIntent = new Intent(context, CIMPushService.class); - serviceIntent.setAction(ACTION_SEND_PONG); - startService(context, serviceIntent); + if (isDestroyed(context) || isStopped(context)) { + return; + } + context.sendBroadcast(new Intent(ACTION_CIM_CONNECTION_PONG)); } private static void sendBindRequest(Context context, String account) { diff --git a/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMPushService.java b/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMPushService.java index 599d305..60530b7 100644 --- a/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMPushService.java +++ b/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMPushService.java @@ -53,15 +53,16 @@ public class CIMPushService extends Service { static final String KEY_NOTIFICATION_CHANNEL = "KEY_NOTIFICATION_CHANNEL"; static final String KEY_NOTIFICATION_ICON = "KEY_NOTIFICATION_ICON"; - private final static String TRANSIENT_NTC_CHANNEL_ID = "CIM_PUSH_TRANSIENT_NTC_ID"; - private final static String PERSIST_NTC_CHANNEL_ID = "CIM_PUSH_PERSIST_NTC_ID"; + private static final String TRANSIENT_NTC_CHANNEL_ID = "CIM_PUSH_TRANSIENT_NTC_ID"; + private static final String PERSIST_NTC_CHANNEL_ID = "CIM_PUSH_PERSIST_NTC_ID"; - private final static int NOTIFICATION_ID = Integer.MAX_VALUE; + private static final int NOTIFICATION_ID = Integer.MAX_VALUE; - private final static int PERSIST_NOTIFICATION_ID = Integer.MIN_VALUE; + private static final int PERSIST_NOTIFICATION_ID = Integer.MIN_VALUE; private CIMConnectorManager connectorManager; private KeepAliveBroadcastReceiver keepAliveReceiver; + private InnerEventBroadcastReceiver innerEventReceiver; private ConnectivityManager connectivityManager; private NotificationManager notificationManager; private final AtomicBoolean persistHolder = new AtomicBoolean(false); @@ -71,8 +72,11 @@ public class CIMPushService extends Service { public void onCreate() { connectorManager = CIMConnectorManager.getManager(this.getApplicationContext()); notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + innerEventReceiver = new InnerEventBroadcastReceiver(); + registerReceiver(innerEventReceiver, innerEventReceiver.getIntentFilter()); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { keepAliveReceiver = new KeepAliveBroadcastReceiver(); registerReceiver(keepAliveReceiver, keepAliveReceiver.getIntentFilter()); } @@ -147,8 +151,9 @@ public class CIMPushService extends Service { handleKeepAlive(); } - if (CIMPushManager.ACTION_SEND_PONG.equals(action)) { - connectorManager.send(Pong.getInstance()); + if (CIMPushManager.ACTION_DESTROY_CIM_SERVICE.equals(action)) { + connectorManager.close(); + this.stopSelf(); } if (CIMPushManager.ACTION_SET_LOGGER_EATABLE.equals(action)) { @@ -156,11 +161,6 @@ public class CIMPushService extends Service { CIMLogger.getLogger().debugMode(enable); } - if (CIMPushManager.ACTION_DESTROY_CIM_SERVICE.equals(action)) { - connectorManager.close(); - this.stopSelf(); - } - if (CIMPushManager.ACTION_SHOW_PERSIST_NOTIFICATION.equals(action)) { createPersistNotification(intent.getStringExtra(KEY_NOTIFICATION_CHANNEL), intent.getStringExtra(KEY_NOTIFICATION_MESSAGE), @@ -239,6 +239,9 @@ public class CIMPushService extends Service { persistHolder.set(false); + unregisterReceiver(innerEventReceiver); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { unregisterReceiver(keepAliveReceiver); } @@ -320,4 +323,19 @@ public class CIMPushService extends Service { } + private class InnerEventBroadcastReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + connectorManager.send(Pong.getInstance()); + } + + public IntentFilter getIntentFilter() { + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(CIMPushManager.ACTION_CIM_CONNECTION_PONG); + return intentFilter; + } + + } + } diff --git a/cim-use-examples/cim-client-android/app/libs/cim-android-sdk-3.8.0.jar b/cim-use-examples/cim-client-android/app/libs/cim-android-sdk-3.8.2.jar similarity index 56% rename from cim-use-examples/cim-client-android/app/libs/cim-android-sdk-3.8.0.jar rename to cim-use-examples/cim-client-android/app/libs/cim-android-sdk-3.8.2.jar index 5de2b0f..4fac3c0 100644 Binary files a/cim-use-examples/cim-client-android/app/libs/cim-android-sdk-3.8.0.jar and b/cim-use-examples/cim-client-android/app/libs/cim-android-sdk-3.8.2.jar differ