mirror of
https://gitee.com/farsunset/cim.git
synced 2025-06-17 07:35:25 +08:00
修改android12中可能出现ForegroundServiceStartNotAllowedException的问题
This commit is contained in:
parent
69cbb31d9e
commit
7a9a369960
@ -189,5 +189,5 @@ https://www.yuque.com/yuanfangxiyang/ma4ytb/vvy3iz/edit#nnzKN
|
||||
android端sdk引用
|
||||
|
||||
```
|
||||
implementation "com.farsunset:cim-android-sdk:4.2.0"
|
||||
implementation "com.farsunset:cim-android-sdk:4.2.5"
|
||||
```
|
Binary file not shown.
@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>com.farsunset</groupId>
|
||||
<artifactId>cim-android-sdk</artifactId>
|
||||
<version>4.2.0</version>
|
||||
<version>4.2.5</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>${project.groupId}:${project.artifactId}</name>
|
||||
|
@ -27,6 +27,7 @@ import android.os.Handler;
|
||||
import com.farsunset.cim.sdk.android.coder.ClientMessageDecoder;
|
||||
import com.farsunset.cim.sdk.android.coder.ClientMessageEncoder;
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.android.constant.IntentAction;
|
||||
import com.farsunset.cim.sdk.android.logger.CIMLogger;
|
||||
import com.farsunset.cim.sdk.android.model.*;
|
||||
|
||||
@ -95,7 +96,7 @@ class CIMConnectorManager {
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setPackage(context.getPackageName());
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_CONNECT_FAILED);
|
||||
intent.setAction(IntentAction.ACTION_CONNECT_FAILED);
|
||||
context.sendBroadcast(intent);
|
||||
|
||||
return;
|
||||
@ -205,7 +206,7 @@ class CIMConnectorManager {
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setPackage(context.getPackageName());
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_CONNECT_FINISHED);
|
||||
intent.setAction(IntentAction.ACTION_CONNECT_FINISHED);
|
||||
context.sendBroadcast(intent);
|
||||
|
||||
}
|
||||
@ -218,7 +219,7 @@ class CIMConnectorManager {
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setPackage(context.getPackageName());
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_CONNECTION_CLOSED);
|
||||
intent.setAction(IntentAction.ACTION_CONNECTION_CLOSED);
|
||||
context.sendBroadcast(intent);
|
||||
|
||||
}
|
||||
@ -237,7 +238,7 @@ class CIMConnectorManager {
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setPackage(context.getPackageName());
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_MESSAGE_RECEIVED);
|
||||
intent.setAction(IntentAction.ACTION_MESSAGE_RECEIVED);
|
||||
intent.putExtra(Message.class.getName(), (Message) obj);
|
||||
context.sendBroadcast(intent);
|
||||
|
||||
@ -246,7 +247,7 @@ class CIMConnectorManager {
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setPackage(context.getPackageName());
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_REPLY_RECEIVED);
|
||||
intent.setAction(IntentAction.ACTION_REPLY_RECEIVED);
|
||||
intent.putExtra(ReplyBody.class.getName(), (ReplyBody) obj);
|
||||
context.sendBroadcast(intent);
|
||||
}
|
||||
@ -260,7 +261,7 @@ class CIMConnectorManager {
|
||||
if (message instanceof SentBody) {
|
||||
Intent intent = new Intent();
|
||||
intent.setPackage(context.getPackageName());
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_SEND_FINISHED);
|
||||
intent.setAction(IntentAction.ACTION_SEND_FINISHED);
|
||||
intent.putExtra(SentBody.class.getName(), (SentBody) message);
|
||||
context.sendBroadcast(intent);
|
||||
}
|
||||
@ -288,7 +289,7 @@ class CIMConnectorManager {
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setPackage(context.getPackageName());
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_CONNECT_FAILED);
|
||||
intent.setAction(IntentAction.ACTION_CONNECT_FAILED);
|
||||
intent.putExtra("interval", interval);
|
||||
context.sendBroadcast(intent);
|
||||
|
||||
|
@ -25,8 +25,10 @@ import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.os.Build;
|
||||
import com.farsunset.cim.sdk.android.constant.BundleKey;
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.android.constant.IntentAction;
|
||||
import com.farsunset.cim.sdk.android.constant.ServiceAction;
|
||||
import com.farsunset.cim.sdk.android.model.Message;
|
||||
import com.farsunset.cim.sdk.android.model.ReplyBody;
|
||||
import com.farsunset.cim.sdk.android.model.SentBody;
|
||||
@ -38,7 +40,6 @@ public abstract class CIMEventBroadcastReceiver extends BroadcastReceiver {
|
||||
|
||||
protected Context context;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
|
||||
@ -50,6 +51,7 @@ public abstract class CIMEventBroadcastReceiver extends BroadcastReceiver {
|
||||
* 操作事件广播,用于提高service存活率
|
||||
*/
|
||||
if (Intent.ACTION_USER_PRESENT.equals(action)
|
||||
|| Intent.ACTION_BOOT_COMPLETED.equals(action)
|
||||
|| Intent.ACTION_POWER_CONNECTED.equals(action)
|
||||
|| Intent.ACTION_POWER_DISCONNECTED.equals(action)) {
|
||||
startPushService();
|
||||
@ -58,7 +60,7 @@ public abstract class CIMEventBroadcastReceiver extends BroadcastReceiver {
|
||||
/*
|
||||
* 设备网络状态变化事件
|
||||
*/
|
||||
if (CIMConstant.IntentAction.ACTION_NETWORK_CHANGED.equals(action)
|
||||
if (IntentAction.ACTION_NETWORK_CHANGED.equals(action)
|
||||
|| ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
|
||||
|
||||
onDevicesNetworkChanged();
|
||||
@ -67,14 +69,14 @@ public abstract class CIMEventBroadcastReceiver extends BroadcastReceiver {
|
||||
/*
|
||||
* cim断开服务器事件
|
||||
*/
|
||||
if (CIMConstant.IntentAction.ACTION_CONNECTION_CLOSED.equals(action)) {
|
||||
if (IntentAction.ACTION_CONNECTION_CLOSED.equals(action)) {
|
||||
onInnerConnectionClosed();
|
||||
}
|
||||
|
||||
/*
|
||||
* cim连接服务器失败事件
|
||||
*/
|
||||
if (CIMConstant.IntentAction.ACTION_CONNECT_FAILED.equals(action)) {
|
||||
if (IntentAction.ACTION_CONNECT_FAILED.equals(action)) {
|
||||
long interval = intent.getLongExtra("interval", CIMConstant.RECONNECT_INTERVAL_TIME);
|
||||
onInnerConnectFailed(interval);
|
||||
}
|
||||
@ -82,21 +84,21 @@ public abstract class CIMEventBroadcastReceiver extends BroadcastReceiver {
|
||||
/*
|
||||
* cim连接服务器成功事件
|
||||
*/
|
||||
if (CIMConstant.IntentAction.ACTION_CONNECT_FINISHED.equals(action)) {
|
||||
if (IntentAction.ACTION_CONNECT_FINISHED.equals(action)) {
|
||||
onInnerConnectFinished();
|
||||
}
|
||||
|
||||
/*
|
||||
* 收到推送消息事件
|
||||
*/
|
||||
if (CIMConstant.IntentAction.ACTION_MESSAGE_RECEIVED.equals(action)) {
|
||||
if (IntentAction.ACTION_MESSAGE_RECEIVED.equals(action)) {
|
||||
onInnerMessageReceived((Message) intent.getSerializableExtra(Message.class.getName()), intent);
|
||||
}
|
||||
|
||||
/*
|
||||
* 获取收到replyBody成功事件
|
||||
*/
|
||||
if (CIMConstant.IntentAction.ACTION_REPLY_RECEIVED.equals(action)) {
|
||||
if (IntentAction.ACTION_REPLY_RECEIVED.equals(action)) {
|
||||
onReplyReceived((ReplyBody) intent.getSerializableExtra(ReplyBody.class.getName()));
|
||||
}
|
||||
|
||||
@ -104,27 +106,26 @@ public abstract class CIMEventBroadcastReceiver extends BroadcastReceiver {
|
||||
/*
|
||||
* 获取sendBody发送成功事件
|
||||
*/
|
||||
if (CIMConstant.IntentAction.ACTION_SEND_FINISHED.equals(action)) {
|
||||
if (IntentAction.ACTION_SEND_FINISHED.equals(action)) {
|
||||
onSentSucceed((SentBody) intent.getSerializableExtra(SentBody.class.getName()));
|
||||
}
|
||||
|
||||
/*
|
||||
* 重新连接,如果断开的话
|
||||
*/
|
||||
if (CIMConstant.IntentAction.ACTION_CONNECTION_RECOVERY.equals(action)) {
|
||||
if (IntentAction.ACTION_CONNECTION_RECOVERY.equals(action)) {
|
||||
connect(0);
|
||||
}
|
||||
}
|
||||
|
||||
private void startPushService() {
|
||||
|
||||
Intent intent = new Intent(context, CIMPushService.class);
|
||||
intent.setAction(CIMPushManager.ACTION_ACTIVATE_PUSH_SERVICE);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
context.startForegroundService(intent);
|
||||
} else {
|
||||
context.startService(intent);
|
||||
try {
|
||||
Intent intent = new Intent(context, CIMPushService.class);
|
||||
intent.setAction(ServiceAction.ACTION_ACTIVATE_PUSH_SERVICE);
|
||||
CIMPushManager.startService(context,intent);
|
||||
}catch (Exception ignore){
|
||||
context.sendBroadcast(new Intent(IntentAction.ACTION_CONNECTION_RECOVERY));
|
||||
}
|
||||
|
||||
}
|
||||
@ -167,8 +168,8 @@ public abstract class CIMEventBroadcastReceiver extends BroadcastReceiver {
|
||||
|
||||
private void connect(long delay) {
|
||||
Intent serviceIntent = new Intent(context, CIMPushService.class);
|
||||
serviceIntent.putExtra(CIMPushService.KEY_DELAYED_TIME, delay);
|
||||
serviceIntent.setAction(CIMPushManager.ACTION_CREATE_CIM_CONNECTION);
|
||||
serviceIntent.putExtra(BundleKey.KEY_DELAYED_TIME, delay);
|
||||
serviceIntent.setAction(ServiceAction.ACTION_CREATE_CIM_CONNECTION);
|
||||
CIMPushManager.startService(context, serviceIntent);
|
||||
}
|
||||
|
||||
@ -181,12 +182,11 @@ public abstract class CIMEventBroadcastReceiver extends BroadcastReceiver {
|
||||
}
|
||||
|
||||
private boolean isForceOfflineMessage(String action) {
|
||||
return CIMConstant.MessageAction.ACTION_999.equals(action);
|
||||
return CIMConstant.ACTION_999.equals(action);
|
||||
}
|
||||
|
||||
/**
|
||||
* 接收消息实现方法
|
||||
*
|
||||
* @param message
|
||||
* @param intent
|
||||
*/
|
||||
|
@ -30,7 +30,9 @@ import android.net.NetworkInfo;
|
||||
import android.os.Build;
|
||||
import android.os.LocaleList;
|
||||
import android.text.TextUtils;
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.android.constant.BundleKey;
|
||||
import com.farsunset.cim.sdk.android.constant.RequestKey;
|
||||
import com.farsunset.cim.sdk.android.constant.ServiceAction;
|
||||
import com.farsunset.cim.sdk.android.logger.CIMLogger;
|
||||
import com.farsunset.cim.sdk.android.model.SentBody;
|
||||
|
||||
@ -43,24 +45,6 @@ import java.util.UUID;
|
||||
public class CIMPushManager {
|
||||
|
||||
|
||||
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_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_CIM_CONNECTION_PONG = "ACTION_CIM_CONNECTION_PONG";
|
||||
|
||||
/**
|
||||
* 初始化,连接服务端,在程序启动页或者 在Application里调用
|
||||
* @param context
|
||||
@ -82,7 +66,7 @@ public class CIMPushManager {
|
||||
|
||||
|
||||
Intent serviceIntent = new Intent(context, CIMPushService.class);
|
||||
serviceIntent.setAction(ACTION_CREATE_CIM_CONNECTION);
|
||||
serviceIntent.setAction(ServiceAction.ACTION_CREATE_CIM_CONNECTION);
|
||||
startService(context, serviceIntent);
|
||||
|
||||
}
|
||||
@ -94,8 +78,8 @@ public class CIMPushManager {
|
||||
*/
|
||||
public static void setLoggerEnable(Context context, boolean enable) {
|
||||
Intent serviceIntent = new Intent(context, CIMPushService.class);
|
||||
serviceIntent.putExtra(CIMPushService.KEY_LOGGER_ENABLE, enable);
|
||||
serviceIntent.setAction(ACTION_SET_LOGGER_EATABLE);
|
||||
serviceIntent.putExtra(BundleKey.KEY_LOGGER_ENABLE, enable);
|
||||
serviceIntent.setAction(ServiceAction.ACTION_SET_LOGGER_EATABLE);
|
||||
startService(context, serviceIntent);
|
||||
}
|
||||
|
||||
@ -109,10 +93,10 @@ public class CIMPushManager {
|
||||
*/
|
||||
public static void startForeground(Context context,int icon, String channel , String message) {
|
||||
Intent serviceIntent = new Intent(context, CIMPushService.class);
|
||||
serviceIntent.putExtra(CIMPushService.KEY_NOTIFICATION_MESSAGE, message);
|
||||
serviceIntent.putExtra(CIMPushService.KEY_NOTIFICATION_CHANNEL, channel);
|
||||
serviceIntent.putExtra(CIMPushService.KEY_NOTIFICATION_ICON, icon);
|
||||
serviceIntent.setAction(ACTION_SHOW_PERSIST_NOTIFICATION);
|
||||
serviceIntent.putExtra(BundleKey.KEY_NOTIFICATION_MESSAGE, message);
|
||||
serviceIntent.putExtra(BundleKey.KEY_NOTIFICATION_CHANNEL, channel);
|
||||
serviceIntent.putExtra(BundleKey.KEY_NOTIFICATION_ICON, icon);
|
||||
serviceIntent.setAction(ServiceAction.ACTION_SHOW_PERSIST_NOTIFICATION);
|
||||
startService(context, serviceIntent);
|
||||
}
|
||||
|
||||
@ -122,7 +106,7 @@ public class CIMPushManager {
|
||||
*/
|
||||
public static void cancelForeground(Context context) {
|
||||
Intent serviceIntent = new Intent(context, CIMPushService.class);
|
||||
serviceIntent.setAction(ACTION_HIDE_PERSIST_NOTIFICATION);
|
||||
serviceIntent.setAction(ServiceAction.ACTION_HIDE_PERSIST_NOTIFICATION);
|
||||
startService(context, serviceIntent);
|
||||
}
|
||||
|
||||
@ -159,7 +143,7 @@ public class CIMPushManager {
|
||||
public static void setTag(Context context, String tag) {
|
||||
|
||||
SentBody sent = new SentBody();
|
||||
sent.setKey(CIMConstant.RequestKey.CLIENT_SET_TAG);
|
||||
sent.setKey(RequestKey.CLIENT_SET_TAG);
|
||||
sent.put("tag", tag);
|
||||
sendRequest(context, sent);
|
||||
|
||||
@ -172,7 +156,7 @@ public class CIMPushManager {
|
||||
public static void removeTag(Context context) {
|
||||
|
||||
SentBody sent = new SentBody();
|
||||
sent.setKey(CIMConstant.RequestKey.CLIENT_REMOVE_TAG);
|
||||
sent.setKey(RequestKey.CLIENT_REMOVE_TAG);
|
||||
sendRequest(context, sent);
|
||||
|
||||
}
|
||||
@ -187,7 +171,7 @@ public class CIMPushManager {
|
||||
}
|
||||
|
||||
Intent serviceIntent = new Intent(context, CIMPushService.class);
|
||||
serviceIntent.setAction(ACTION_CIM_CONNECTION_PONG);
|
||||
serviceIntent.setAction(ServiceAction.ACTION_CIM_CONNECTION_PONG);
|
||||
startService(context, serviceIntent);
|
||||
}
|
||||
|
||||
@ -199,7 +183,7 @@ public class CIMPushManager {
|
||||
CIMCacheManager.putString(context, CIMCacheManager.KEY_UID, uid);
|
||||
|
||||
SentBody sent = new SentBody();
|
||||
sent.setKey(CIMConstant.RequestKey.CLIENT_BIND);
|
||||
sent.setKey(RequestKey.CLIENT_BIND);
|
||||
sent.put("uid", String.valueOf(uid));
|
||||
sent.put("channel", "android");
|
||||
sent.put("deviceId", getDeviceId(context));
|
||||
@ -237,8 +221,8 @@ public class CIMPushManager {
|
||||
}
|
||||
|
||||
Intent serviceIntent = new Intent(context, CIMPushService.class);
|
||||
serviceIntent.putExtra(CIMPushService.KEY_SEND_BODY, body);
|
||||
serviceIntent.setAction(ACTION_SEND_REQUEST_BODY);
|
||||
serviceIntent.putExtra(BundleKey.KEY_SEND_BODY, body);
|
||||
serviceIntent.setAction(ServiceAction.ACTION_SEND_REQUEST_BODY);
|
||||
startService(context, serviceIntent);
|
||||
|
||||
}
|
||||
@ -255,7 +239,7 @@ public class CIMPushManager {
|
||||
CIMCacheManager.putBoolean(context, CIMCacheManager.KEY_MANUAL_STOP, true);
|
||||
|
||||
Intent serviceIntent = new Intent(context, CIMPushService.class);
|
||||
serviceIntent.setAction(ACTION_CLOSE_CIM_CONNECTION);
|
||||
serviceIntent.setAction(ServiceAction.ACTION_CLOSE_CIM_CONNECTION);
|
||||
startService(context, serviceIntent);
|
||||
|
||||
}
|
||||
@ -269,7 +253,7 @@ public class CIMPushManager {
|
||||
CIMCacheManager.remove(context, CIMCacheManager.KEY_UID);
|
||||
|
||||
Intent serviceIntent = new Intent(context, CIMPushService.class);
|
||||
serviceIntent.setAction(ACTION_DESTROY_CIM_SERVICE);
|
||||
serviceIntent.setAction(ServiceAction.ACTION_DESTROY_CIM_SERVICE);
|
||||
startService(context, serviceIntent);
|
||||
|
||||
}
|
||||
@ -337,6 +321,7 @@ public class CIMPushManager {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static String getVersionName(Context context) {
|
||||
|
||||
try {
|
||||
|
@ -32,7 +32,9 @@ import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.util.Log;
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.android.constant.BundleKey;
|
||||
import com.farsunset.cim.sdk.android.constant.IntentAction;
|
||||
import com.farsunset.cim.sdk.android.constant.ServiceAction;
|
||||
import com.farsunset.cim.sdk.android.logger.CIMLogger;
|
||||
import com.farsunset.cim.sdk.android.model.Pong;
|
||||
import com.farsunset.cim.sdk.android.model.SentBody;
|
||||
@ -46,13 +48,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
*/
|
||||
public class CIMPushService extends Service {
|
||||
|
||||
static final String KEY_SEND_BODY = "KEY_SEND_BODY";
|
||||
static final String KEY_DELAYED_TIME = "KEY_DELAYED_TIME";
|
||||
static final String KEY_LOGGER_ENABLE = "KEY_LOGGER_ENABLE";
|
||||
static final String KEY_NOTIFICATION_MESSAGE = "KEY_NOTIFICATION_MESSAGE";
|
||||
static final String KEY_NOTIFICATION_CHANNEL = "KEY_NOTIFICATION_CHANNEL";
|
||||
static final String KEY_NOTIFICATION_ICON = "KEY_NOTIFICATION_ICON";
|
||||
|
||||
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";
|
||||
|
||||
@ -89,20 +84,13 @@ public class CIMPushService extends Service {
|
||||
private final ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
|
||||
@Override
|
||||
public void onAvailable(Network network) {
|
||||
Intent intent = new Intent();
|
||||
intent.setPackage(getPackageName());
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_NETWORK_CHANGED);
|
||||
sendBroadcast(intent);
|
||||
sendBroadcast(new Intent(IntentAction.ACTION_NETWORK_CHANGED));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLost(Network network) {
|
||||
Intent intent = new Intent();
|
||||
intent.setPackage(getPackageName());
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_NETWORK_CHANGED);
|
||||
sendBroadcast(intent);
|
||||
sendBroadcast(new Intent(IntentAction.ACTION_NETWORK_CHANGED));
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
private final Handler connectHandler = new Handler() {
|
||||
@ -125,50 +113,52 @@ public class CIMPushService extends Service {
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
|
||||
String action = intent == null ? CIMPushManager.ACTION_ACTIVATE_PUSH_SERVICE : intent.getAction();
|
||||
Intent newIntent = intent == null ? new Intent(ServiceAction.ACTION_ACTIVATE_PUSH_SERVICE) : intent;
|
||||
|
||||
String action = newIntent.getAction();
|
||||
|
||||
if (!persistHolder.get()) {
|
||||
createNotification();
|
||||
}
|
||||
|
||||
if (CIMPushManager.ACTION_CREATE_CIM_CONNECTION.equals(action)) {
|
||||
this.prepareConnect(intent.getLongExtra(KEY_DELAYED_TIME, 0));
|
||||
if (ServiceAction.ACTION_CREATE_CIM_CONNECTION.equals(action)) {
|
||||
this.prepareConnect(newIntent.getLongExtra(BundleKey.KEY_DELAYED_TIME, 0));
|
||||
}
|
||||
|
||||
if (CIMPushManager.ACTION_SEND_REQUEST_BODY.equals(action)) {
|
||||
connectorManager.send((SentBody) intent.getSerializableExtra(KEY_SEND_BODY));
|
||||
if (ServiceAction.ACTION_SEND_REQUEST_BODY.equals(action)) {
|
||||
connectorManager.send((SentBody) newIntent.getSerializableExtra(BundleKey.KEY_SEND_BODY));
|
||||
}
|
||||
|
||||
if (CIMPushManager.ACTION_CLOSE_CIM_CONNECTION.equals(action)) {
|
||||
if (ServiceAction.ACTION_CLOSE_CIM_CONNECTION.equals(action)) {
|
||||
connectorManager.close();
|
||||
}
|
||||
|
||||
if (CIMPushManager.ACTION_ACTIVATE_PUSH_SERVICE.equals(action)) {
|
||||
if (ServiceAction.ACTION_ACTIVATE_PUSH_SERVICE.equals(action)) {
|
||||
handleKeepAlive();
|
||||
}
|
||||
|
||||
if (CIMPushManager.ACTION_DESTROY_CIM_SERVICE.equals(action)) {
|
||||
if (ServiceAction.ACTION_DESTROY_CIM_SERVICE.equals(action)) {
|
||||
connectorManager.close();
|
||||
this.stopSelf();
|
||||
}
|
||||
|
||||
if (CIMPushManager.ACTION_CIM_CONNECTION_PONG.equals(action)) {
|
||||
if (ServiceAction.ACTION_CIM_CONNECTION_PONG.equals(action)) {
|
||||
connectorManager.send(Pong.getInstance());
|
||||
}
|
||||
|
||||
if (CIMPushManager.ACTION_SET_LOGGER_EATABLE.equals(action)) {
|
||||
boolean enable = intent.getBooleanExtra(KEY_LOGGER_ENABLE, true);
|
||||
if (ServiceAction.ACTION_SET_LOGGER_EATABLE.equals(action)) {
|
||||
boolean enable = newIntent.getBooleanExtra(BundleKey.KEY_LOGGER_ENABLE, true);
|
||||
CIMLogger.getLogger().debugMode(enable);
|
||||
}
|
||||
|
||||
if (CIMPushManager.ACTION_SHOW_PERSIST_NOTIFICATION.equals(action)) {
|
||||
createPersistNotification(intent.getStringExtra(KEY_NOTIFICATION_CHANNEL),
|
||||
intent.getStringExtra(KEY_NOTIFICATION_MESSAGE),
|
||||
intent.getIntExtra(KEY_NOTIFICATION_ICON,0));
|
||||
if (ServiceAction.ACTION_SHOW_PERSIST_NOTIFICATION.equals(action)) {
|
||||
createPersistNotification(newIntent.getStringExtra(BundleKey.KEY_NOTIFICATION_CHANNEL),
|
||||
newIntent.getStringExtra(BundleKey.KEY_NOTIFICATION_MESSAGE),
|
||||
newIntent.getIntExtra(BundleKey.KEY_NOTIFICATION_ICON,0));
|
||||
persistHolder.set(true);
|
||||
}
|
||||
|
||||
if (CIMPushManager.ACTION_HIDE_PERSIST_NOTIFICATION.equals(action)) {
|
||||
if (ServiceAction.ACTION_HIDE_PERSIST_NOTIFICATION.equals(action)) {
|
||||
stopForeground(true);
|
||||
persistHolder.set(false);
|
||||
}
|
||||
@ -177,7 +167,7 @@ public class CIMPushService extends Service {
|
||||
notificationHandler.sendEmptyMessageDelayed(0, 200);
|
||||
}
|
||||
|
||||
return super.onStartCommand(intent,flags,startId);
|
||||
return Service.START_REDELIVER_INTENT;
|
||||
}
|
||||
|
||||
private void prepareConnect(long delayMillis) {
|
||||
@ -319,6 +309,8 @@ public class CIMPushService extends Service {
|
||||
intentFilter.addAction(Intent.ACTION_POWER_CONNECTED);
|
||||
intentFilter.addAction(Intent.ACTION_POWER_DISCONNECTED);
|
||||
intentFilter.addAction(Intent.ACTION_USER_PRESENT);
|
||||
intentFilter.addAction(Intent.ACTION_BOOT_COMPLETED);
|
||||
intentFilter.addAction(IntentAction.ACTION_CONNECTION_RECOVERY);
|
||||
return intentFilter;
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
package com.farsunset.cim.sdk.android.coder;
|
||||
|
||||
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.android.constant.ProtobufType;
|
||||
import com.farsunset.cim.sdk.android.model.Message;
|
||||
import com.farsunset.cim.sdk.android.model.Ping;
|
||||
import com.farsunset.cim.sdk.android.model.ReplyBody;
|
||||
@ -72,11 +72,11 @@ public class ClientMessageDecoder {
|
||||
/*
|
||||
消息读取完成后,通过type来解析成对应的消息体
|
||||
*/
|
||||
if (CIMConstant.ProtobufType.PING == type) {
|
||||
if (ProtobufType.PING == type) {
|
||||
return Ping.getInstance();
|
||||
}
|
||||
|
||||
if (CIMConstant.ProtobufType.REPLY_BODY == type) {
|
||||
if (ProtobufType.REPLY_BODY == type) {
|
||||
ReplyBodyProto.Model bodyProto = ReplyBodyProto.Model.parseFrom(bodyBuffer.array());
|
||||
ReplyBody body = new ReplyBody();
|
||||
body.setKey(bodyProto.getKey());
|
||||
|
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
***************************************************************************************
|
||||
* *
|
||||
* Website : http://www.farsunset.com *
|
||||
* *
|
||||
***************************************************************************************
|
||||
*/
|
||||
package com.farsunset.cim.sdk.android.constant;
|
||||
|
||||
public interface BundleKey {
|
||||
|
||||
String KEY_SEND_BODY = "KEY_SEND_BODY";
|
||||
|
||||
String KEY_DELAYED_TIME = "KEY_DELAYED_TIME";
|
||||
|
||||
String KEY_LOGGER_ENABLE = "KEY_LOGGER_ENABLE";
|
||||
|
||||
String KEY_NOTIFICATION_MESSAGE = "KEY_NOTIFICATION_MESSAGE";
|
||||
|
||||
String KEY_NOTIFICATION_CHANNEL = "KEY_NOTIFICATION_CHANNEL";
|
||||
|
||||
String KEY_NOTIFICATION_ICON = "KEY_NOTIFICATION_ICON";
|
||||
|
||||
}
|
@ -30,84 +30,9 @@ public interface CIMConstant {
|
||||
*/
|
||||
int DATA_HEADER_LENGTH = 3;
|
||||
|
||||
interface ProtobufType {
|
||||
|
||||
/*
|
||||
客户端->服务端 发送的心跳响应
|
||||
*/
|
||||
byte PONG = 0;
|
||||
|
||||
/*
|
||||
服务端->客户端 发送的心跳请求
|
||||
*/
|
||||
byte PING = 1;
|
||||
|
||||
byte MESSAGE = 2;
|
||||
|
||||
byte SENT_BODY = 3;
|
||||
|
||||
byte REPLY_BODY = 4;
|
||||
}
|
||||
|
||||
interface RequestKey {
|
||||
|
||||
String CLIENT_BIND = "client_bind";
|
||||
|
||||
String CLIENT_SET_TAG = "client_set_tag";
|
||||
|
||||
String CLIENT_REMOVE_TAG = "client_remove_tag";
|
||||
|
||||
}
|
||||
|
||||
interface MessageAction {
|
||||
|
||||
/*
|
||||
被其他设备登录挤下线消息
|
||||
*/
|
||||
String ACTION_999 = "999";
|
||||
}
|
||||
|
||||
interface IntentAction {
|
||||
|
||||
/*
|
||||
消息广播action
|
||||
*/
|
||||
String ACTION_MESSAGE_RECEIVED = "com.farsunset.cim.MESSAGE_RECEIVED";
|
||||
|
||||
/*
|
||||
发送sendBody成功广播
|
||||
*/
|
||||
String ACTION_SEND_FINISHED = "com.farsunset.cim.SEND_FINISHED";
|
||||
|
||||
/*
|
||||
链接意外关闭广播
|
||||
*/
|
||||
String ACTION_CONNECTION_CLOSED = "com.farsunset.cim.CONNECTION_CLOSED";
|
||||
|
||||
/*
|
||||
链接失败广播
|
||||
*/
|
||||
String ACTION_CONNECT_FAILED = "com.farsunset.cim.CONNECT_FAILED";
|
||||
|
||||
/*
|
||||
链接成功广播
|
||||
*/
|
||||
String ACTION_CONNECT_FINISHED = "com.farsunset.cim.CONNECT_FINISHED";
|
||||
|
||||
/*
|
||||
发送sendBody成功后获得replayBody回应广播
|
||||
*/
|
||||
String ACTION_REPLY_RECEIVED = "com.farsunset.cim.REPLY_RECEIVED";
|
||||
|
||||
/*
|
||||
网络变化广播
|
||||
*/
|
||||
String ACTION_NETWORK_CHANGED = "com.farsunset.cim.NETWORK_CHANGED";
|
||||
|
||||
/*
|
||||
重试连接
|
||||
*/
|
||||
String ACTION_CONNECTION_RECOVERY = "com.farsunset.cim.CONNECTION_RECOVERY";
|
||||
}
|
||||
/*
|
||||
被其他设备登录挤下线消息
|
||||
*/
|
||||
String ACTION_999 = "999";
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
***************************************************************************************
|
||||
* *
|
||||
* Website : http://www.farsunset.com *
|
||||
* *
|
||||
***************************************************************************************
|
||||
*/
|
||||
package com.farsunset.cim.sdk.android.constant;
|
||||
|
||||
public interface IntentAction {
|
||||
|
||||
/*
|
||||
消息广播action
|
||||
*/
|
||||
String ACTION_MESSAGE_RECEIVED = "com.farsunset.cim.MESSAGE_RECEIVED";
|
||||
|
||||
/*
|
||||
发送sendBody成功广播
|
||||
*/
|
||||
String ACTION_SEND_FINISHED = "com.farsunset.cim.SEND_FINISHED";
|
||||
|
||||
/*
|
||||
链接意外关闭广播
|
||||
*/
|
||||
String ACTION_CONNECTION_CLOSED = "com.farsunset.cim.CONNECTION_CLOSED";
|
||||
|
||||
/*
|
||||
链接失败广播
|
||||
*/
|
||||
String ACTION_CONNECT_FAILED = "com.farsunset.cim.CONNECT_FAILED";
|
||||
|
||||
/*
|
||||
链接成功广播
|
||||
*/
|
||||
String ACTION_CONNECT_FINISHED = "com.farsunset.cim.CONNECT_FINISHED";
|
||||
|
||||
/*
|
||||
发送sendBody成功后获得replayBody回应广播
|
||||
*/
|
||||
String ACTION_REPLY_RECEIVED = "com.farsunset.cim.REPLY_RECEIVED";
|
||||
|
||||
/*
|
||||
网络变化广播
|
||||
*/
|
||||
String ACTION_NETWORK_CHANGED = "com.farsunset.cim.NETWORK_CHANGED";
|
||||
|
||||
/*
|
||||
重试连接
|
||||
*/
|
||||
String ACTION_CONNECTION_RECOVERY = "com.farsunset.cim.CONNECTION_RECOVERY";
|
||||
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
***************************************************************************************
|
||||
* *
|
||||
* Website : http://www.farsunset.com *
|
||||
* *
|
||||
***************************************************************************************
|
||||
*/
|
||||
package com.farsunset.cim.sdk.android.constant;
|
||||
|
||||
public interface ProtobufType {
|
||||
|
||||
/*
|
||||
客户端->服务端 发送的心跳响应
|
||||
*/
|
||||
byte PONG = 0;
|
||||
|
||||
/*
|
||||
服务端->客户端 发送的心跳请求
|
||||
*/
|
||||
byte PING = 1;
|
||||
|
||||
byte MESSAGE = 2;
|
||||
|
||||
byte SENT_BODY = 3;
|
||||
|
||||
byte REPLY_BODY = 4;
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
***************************************************************************************
|
||||
* *
|
||||
* Website : http://www.farsunset.com *
|
||||
* *
|
||||
***************************************************************************************
|
||||
*/
|
||||
package com.farsunset.cim.sdk.android.constant;
|
||||
|
||||
public interface RequestKey {
|
||||
|
||||
String CLIENT_BIND = "client_bind";
|
||||
|
||||
String CLIENT_SET_TAG = "client_set_tag";
|
||||
|
||||
String CLIENT_REMOVE_TAG = "client_remove_tag";
|
||||
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
***************************************************************************************
|
||||
* *
|
||||
* Website : http://www.farsunset.com *
|
||||
* *
|
||||
***************************************************************************************
|
||||
*/
|
||||
package com.farsunset.cim.sdk.android.constant;
|
||||
|
||||
public interface ServiceAction {
|
||||
|
||||
String ACTION_CREATE_CIM_CONNECTION = "ACTION_CREATE_CIM_CONNECTION";
|
||||
|
||||
String ACTION_DESTROY_CIM_SERVICE = "ACTION_DESTROY_CIM_SERVICE";
|
||||
|
||||
String ACTION_ACTIVATE_PUSH_SERVICE = "ACTION_ACTIVATE_PUSH_SERVICE";
|
||||
|
||||
String ACTION_SEND_REQUEST_BODY = "ACTION_SEND_REQUEST_BODY";
|
||||
|
||||
String ACTION_CLOSE_CIM_CONNECTION = "ACTION_CLOSE_CIM_CONNECTION";
|
||||
|
||||
String ACTION_SET_LOGGER_EATABLE = "ACTION_SET_LOGGER_EATABLE";
|
||||
|
||||
String ACTION_SHOW_PERSIST_NOTIFICATION = "ACTION_SHOW_PERSIST_NOTIFICATION";
|
||||
|
||||
String ACTION_HIDE_PERSIST_NOTIFICATION = "ACTION_HIDE_PERSIST_NOTIFICATION";
|
||||
|
||||
String ACTION_CIM_CONNECTION_PONG = "ACTION_CIM_CONNECTION_PONG";
|
||||
|
||||
}
|
@ -21,7 +21,7 @@
|
||||
*/
|
||||
package com.farsunset.cim.sdk.android.model;
|
||||
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.android.constant.ProtobufType;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@ -56,7 +56,7 @@ public class Pong implements Serializable, BinaryBody {
|
||||
|
||||
@Override
|
||||
public byte getType() {
|
||||
return CIMConstant.ProtobufType.PONG;
|
||||
return ProtobufType.PONG;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -21,7 +21,7 @@
|
||||
*/
|
||||
package com.farsunset.cim.sdk.android.model;
|
||||
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.android.constant.ProtobufType;
|
||||
import com.farsunset.cim.sdk.android.model.proto.SentBodyProto;
|
||||
|
||||
import java.io.Serializable;
|
||||
@ -108,7 +108,7 @@ public class SentBody implements Serializable, BinaryBody {
|
||||
|
||||
@Override
|
||||
public byte getType() {
|
||||
return CIMConstant.ProtobufType.SENT_BODY;
|
||||
return ProtobufType.SENT_BODY;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -34,11 +34,11 @@ android {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation "com.farsunset:cim-android-sdk:4.2.0"
|
||||
implementation 'androidx.appcompat:appcompat:1.5.0'
|
||||
implementation 'com.google.android.material:material:1.6.1'
|
||||
implementation 'androidx.annotation:annotation:1.3.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||
implementation "com.farsunset:cim-android-sdk:4.2.5"
|
||||
implementation 'androidx.appcompat:appcompat:1.2.0'
|
||||
implementation 'com.google.android.material:material:1.2.1'
|
||||
implementation 'androidx.annotation:annotation:1.1.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
|
||||
implementation 'com.google.protobuf:protobuf-lite:3.0.1'
|
||||
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
|
||||
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
|
||||
|
@ -19,6 +19,7 @@ import com.farsunset.cim.sdk.android.CIMEventListener;
|
||||
import com.farsunset.cim.sdk.android.CIMListenerManager;
|
||||
import com.farsunset.cim.sdk.android.CIMPushManager;
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.android.constant.RequestKey;
|
||||
import com.farsunset.cim.sdk.android.model.Message;
|
||||
import com.farsunset.cim.sdk.android.model.ReplyBody;
|
||||
import com.farsunset.cim.sdk.android.model.SentBody;
|
||||
@ -96,7 +97,7 @@ public class LoginActivity extends AppCompatActivity implements CIMEventListener
|
||||
/*
|
||||
*第三步 用户id绑定成功,可以接收消息了
|
||||
*/
|
||||
if (replyBody.getKey().equals(CIMConstant.RequestKey.CLIENT_BIND)) {
|
||||
if (replyBody.getKey().equals(RequestKey.CLIENT_BIND)) {
|
||||
ballsView.runaway();
|
||||
Intent intent = new Intent(this,MessageActivity.class);
|
||||
intent.putExtra("uid",uidEdit.getText().toString().trim());
|
||||
|
Loading…
x
Reference in New Issue
Block a user