Когда приложение убито, активность появляется на секунду, а затем исчезает через android (SINCH). - PullRequest
0 голосов
/ 20 января 2020

Когда я получаю уведомление от sinch, я сначала проверяю, находится ли приложение в фоновом режиме или нет, если приложение находится в фоновом режиме

if(isAppIsInBackground(context)) {
    relayMessageData(data);                           
   }
public void relayMessageData(Map<String, String> data) {
                    payload = data;
                    createNotificationChannel(NotificationManager.IMPORTANCE_MAX);
                    getApplicationContext().bindService(new Intent(getApplicationContext(), SinchService.class), this, BIND_AUTO_CREATE);
                }
            }.relayMessageData(data);

, затем вызывается метод onIncomingCall в службе sinch

@Override public void onIncomingCall(CallClient callClient, Call call) {

    Log.d(TAG, "sinch onIncomingCall: " + call.getCallId());
    Intent intent = new Intent(SinchService.this, IncomingCallScreenActivity.class);
    intent.putExtra(EXTRA_ID, MESSAGE_ID);
    intent.putExtra(CALL_ID, call.getCallId());
    boolean inForeground = isAppOnForeground(SinchService.this);
    if (!inForeground) {
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        //intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && !inForeground) {//Q
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        ((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).notify(MESSAGE_ID, createIncomingCallNotification(call.getRemoteUserId(), intent));
    } else {
        //((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).notify(MESSAGE_ID, createIncomingCallNotification(call.getRemoteUserId(), intent));
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        SinchService.this.startActivity(intent);


    }
}

1 Ответ

0 голосов
/ 21 января 2020

Я решил эту проблему, добавив код PowerManager в FirebaseMessagingService

if(isAppIsInBackground(context)){

                                Log.e("sinch data","isAppIsInBackground");
                                //relayMessageData(data);
                                Intent intent = new Intent(context, IncomingCallScreenActivity.class);
                                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                intent.putExtra("CALL_ID",result.getCallResult().getCallId());
                                //intent.putExtra("id",result.getMessageResult().getMessageId());
                                startActivity(intent);

                                PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
                                PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK
                                        | PowerManager.ACQUIRE_CAUSES_WAKEUP, "ReplaceTag");
                                wl.acquire(15000);

                            }
...