请帮助我!
设备A登录和配置chatService
设备B登录和配置chatService
设备B startCall并向设备A发送通知
设备A接收通知并发送到CallSerivce
String message = data.get("message");
if(message != null){
CallService.start(this, G.userQB);
}
我的问题:
启动CallService后,回调和onReceiveNewSession(QBRTCSession会话)不起作用,没有收到任何内容,也没有在logcat中设置
CallService.java
public class CallService extends Service implements QBRTCClientSessionCallbacks, QBRTCSessionConnectionCallbacks {
private static final String TAG = CallService.class.getSimpleName();
private QBChatService chatService;
private QBRTCClient rtcClient;
private PendingIntent pendingIntent;
private int currentCommand;
private QBUser currentUser;
public static void start(Context context, QBUser qbUser, PendingIntent pendingIntent) {
Intent intent = new Intent(context, CallService.class);
intent.putExtra(Consts.EXTRA_COMMAND_TO_SERVICE, Consts.COMMAND_LOGIN);
intent.putExtra(Consts.EXTRA_QB_USER, qbUser);
intent.putExtra(Consts.EXTRA_PENDING_INTENT, pendingIntent);
Log.i("errorCheck", "pendingIntent => " + pendingIntent);
context.startService(intent);
}
public static void start(Context context, QBUser qbUser) {
start(context, qbUser, null);
}
@Override
public void onCreate() {
super.onCreate();
/*QBSettings.getInstance().init(getApplicationContext(), G.APP_ID, G.AUTH_KEY, G.AUTH_SECRET);
QBSettings.getInstance().setAccountKey(G.ACCOUNT_KEY);
QBSettings.getInstance().setEnablePushNotification(true);
QBSettings.getInstance().isEnablePushNotification();*/
createChatService();
Log.d(TAG, "Service onCreate()");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "Service started");
parseIntentExtras(intent);
startSuitableActions();
return START_REDELIVER_INTENT;
}
private void parseIntentExtras(Intent intent) {
if (intent != null && intent.getExtras() != null) {
currentCommand = intent.getIntExtra(Consts.EXTRA_COMMAND_TO_SERVICE, Consts.COMMAND_NOT_FOUND);
pendingIntent = intent.getParcelableExtra(Consts.EXTRA_PENDING_INTENT);
currentUser = (QBUser) intent.getSerializableExtra(Consts.EXTRA_QB_USER);
}
}
private void startSuitableActions() {
Log.i("errorCheck",currentCommand+ " == " + Consts.COMMAND_LOGIN);
Log.i("errorCheck",currentCommand+ " == "+Consts.COMMAND_LOGOUT);
if (currentCommand == Consts.COMMAND_LOGIN) {
Log.i("errorCheck","?!: TO");
startLoginToChat();
} else if (currentCommand == Consts.COMMAND_LOGOUT) {
Log.i("errorCheck","?!: OUT");
logout();
}
}
private void createChatService() {
if (chatService == null) {
QBChatService.setDebugEnabled(true);
chatService = QBChatService.getInstance();
}
}
private void startLoginToChat() {
Log.i("errorCheck","?!: "+chatService);
if (!chatService.isLoggedIn()) {
Log.i("errorCheck","??????!!!!: "+chatService);
loginToChat(currentUser);
} else {
Log.i("errorCheck", "NOLOGIN: "+chatService);
sendResultToActivity(true, null);
}
}
private void loginToChat(QBUser qbUser) {
Log.i("errorCheck", "QQ: " + chatService);
chatService.login(qbUser, new QBEntityCallback<QBUser>() {
@Override
public void onSuccess(QBUser qbUser, Bundle bundle) {
Log.d(TAG, "login onSuccess");
startActionsOnSuccessLogin();
}
@Override
public void onError(QBResponseException e) {
Log.d(TAG, "login onError " + e.getMessage());
sendResultToActivity(false, e.getMessage() != null
? e.getMessage()
: "Login error");
}
});
}
private void startActionsOnSuccessLogin() {
initPingListener();
initQBRTCClient();
sendResultToActivity(true, null);
}
private void initPingListener() {
ChatPingAlarmManager.onCreate(this);
ChatPingAlarmManager.getInstanceFor().addPingListener(new PingFailedListener() {
@Override
public void pingFailed() {
Log.d(TAG, "Ping chat server failed");
}
});
}
private void initQBRTCClient() {
rtcClient = QBRTCClient.getInstance(getApplicationContext());
// Add signalling manager
chatService.getVideoChatWebRTCSignalingManager().addSignalingManagerListener(new QBVideoChatSignalingManagerListener() {
@Override
public void signalingCreated(QBSignaling qbSignaling, boolean createdLocally) {
if (!createdLocally) {
rtcClient.addSignaling((QBWebRTCSignaling) qbSignaling);
}
}
});
// Configure
QBRTCConfig.setDebugEnabled(true);
SettingsUtil.configRTCTimers(CallService.this);
// Add service as callback to RTCClient
rtcClient.addSessionCallbacksListener(WebRtcSessionManager.getInstance(this));
rtcClient.prepareToProcessCalls();
}
private void sendResultToActivity(boolean isSuccess, String errorMessage) {
Log.d(TAG, "Activity(): "+isSuccess+" , "+errorMessage+" , "+pendingIntent);
if (pendingIntent != null) {
Log.d(TAG, "sendResultToActivity()");
try {
Intent intent = new Intent();
intent.putExtra(Consts.EXTRA_LOGIN_RESULT, isSuccess);
intent.putExtra(Consts.EXTRA_LOGIN_ERROR_MESSAGE, errorMessage);
/*Intent newInt = new Intent(Intent.ACTION_SENDTO);
newInt.setData(Uri.parse("sms:0523737233"));
newInt.putExtra("sms_body", "The SMS text");
pendingIntent = PendingIntent.getActivity(this, 0, newInt, 0);*/
pendingIntent.send(CallService.this, Consts.EXTRA_LOGIN_RESULT_CODE, intent);
} catch (PendingIntent.CanceledException e) {
String errorMessageSendingResult = e.getMessage();
Log.d(TAG, errorMessageSendingResult != null
? errorMessageSendingResult
: "Error sending result to activity");
}
}
}
public static void logout(Context context) {
Intent intent = new Intent(context, CallService.class);
intent.putExtra(Consts.EXTRA_COMMAND_TO_SERVICE, Consts.COMMAND_LOGOUT);
context.startService(intent);
}
private void logout() {
destroyRtcClientAndChat();
}
private void destroyRtcClientAndChat() {
if (rtcClient != null) {
rtcClient.destroy();
}
ChatPingAlarmManager.onDestroy();
if (chatService != null) {
chatService.logout(new QBEntityCallback<Void>() {
@Override
public void onSuccess(Void aVoid, Bundle bundle) {
chatService.destroy();
}
@Override
public void onError(QBResponseException e) {
Log.d(TAG, "logout onError " + e.getMessage());
chatService.destroy();
}
});
}
stopSelf();
}
@Override
public void onDestroy() {
Log.d(TAG, "Service onDestroy()");
super.onDestroy();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
Log.d(TAG, "Service onBind)");
return null;
}
@Override
public void onTaskRemoved(Intent rootIntent) {
Log.d(TAG, "Service onTaskRemoved()");
super.onTaskRemoved(rootIntent);
destroyRtcClientAndChat();
}
@Override
public void onReceiveNewSession(QBRTCSession qbrtcSession) {
Log.d(TAG, ""+1);
}
@Override
public void onUserNoActions(QBRTCSession qbrtcSession, Integer integer) {
Log.d(TAG, ""+1);
}
@Override
public void onSessionStartClose(QBRTCSession qbrtcSession) {
Log.d(TAG, ""+1);
}
@Override
public void onStartConnectToUser(QBRTCSession qbrtcSession, Integer integer) {
Log.d(TAG, ""+1);
}
@Override
public void onDisconnectedTimeoutFromUser(QBRTCSession qbrtcSession, Integer integer) {
Log.d(TAG, ""+1);
}
@Override
public void onConnectionFailedWithUser(QBRTCSession qbrtcSession, Integer integer) {
Log.d(TAG, ""+1);
}
@Override
public void onError(QBRTCSession qbrtcSession, QBRTCException e) {
Log.d(TAG, ""+1);
}
@Override
public void onUserNotAnswer(QBRTCSession qbrtcSession, Integer integer) {
Log.d(TAG, ""+1);
}
@Override
public void onCallRejectByUser(QBRTCSession qbrtcSession, Integer integer, Map<String, String> map) {
Log.d(TAG, ""+1);
}
@Override
public void onCallAcceptByUser(QBRTCSession qbrtcSession, Integer integer, Map<String, String> map) {
Log.d(TAG, ""+1);
}
@Override
public void onReceiveHangUpFromUser(QBRTCSession qbrtcSession, Integer integer, Map<String, String> map) {
Log.d(TAG, ""+1);
}
@Override
public void onSessionClosed(QBRTCSession qbrtcSession) {
Log.d(TAG, ""+1);
}
@Override
public void onConnectedToUser(QBRTCSession qbrtcSession, Integer integer) {
Log.d(TAG, ""+1);
}
@Override
public void onDisconnectedFromUser(QBRTCSession qbrtcSession, Integer integer) {
Log.d(TAG, ""+1);
}
@Override
public void onConnectionClosedForUser(QBRTCSession qbrtcSession, Integer integer) {
Log.d(TAG, ""+1);
}
}
答案 0 :(得分:0)
您可以在收到邮件时启动服务。在MainCctivity的OnCreate中:
startService(new Intent(getBaseContext(),CallService.class));
您的服务必须实现接口:
public class CallService extends Service实现QBRTCClientSessionCallbacks, QBRTCSessionStateCallback&LT;'QBRTCSession&GT; { ...}