Я пишу действительно большое приложение с большим количеством мероприятий. У меня есть один класс, работающий в фоновом режиме, который проверяет, есть ли какие-либо изменения на сервере и выполняет соответствующие действия. Одним из действий является отправка пользователю уведомления о входе, выходе и т. Д. Сотрудника. На уведомления такого типа можно нажать, и они должны открыть контактную страницу сотрудника PeopleSingleScene_Activity, и это работает, как и ожидалось. Однако, когда я нажимаю кнопку «Назад», приложение закрывается (никаких родительских действий).

Код для создания уведомления с ожидающим намерением выглядит следующим образом:

public void sendEmployeeWorkNotification(String ticker, String title, String text, String loc, int employee_id) {
    PendingIntent pendingIntent;
    Intent intent;
    Context currentContext = G.context;

    if (loc.equals("LOC")) {
        intent = new Intent(currentContext, PeopleSingleScene_Activity.class);
        intent.putExtra("people_id", employee_id);
        pendingIntent = PendingIntent.getActivity(currentContext, 0, intent, 0);
    } else {
        //some other actions
    }
    NotificationCompat.Builder builder = new NotificationCompat.Builder(currentContext, CHANNEL_ID)
        .setSmallIcon(R.drawable.vector_notif)
        .setTicker(ticker)
        .setContentTitle(title)
        .setContentText(text)
        .setColor(ContextCompat.getColor(currentContext, R.color.rcOutcome))
        .setStyle(new NotificationCompat.BigTextStyle()
                .bigText(text))
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        .setContentIntent(pendingIntent)
        .setAutoCancel(true);
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(currentContext);

    notificationManager.notify(G.simpleMessageCounter, builder.build());
    simpleSong(R.raw.notificationsimple);
    G.simpleMessageCounter++;
}

G.context - последний открытый контекст действия ... Это статическая переменная в глобальном классе G. Я создаю ее таким образом:

public class SomeActivityClass extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.some_layout);
        G.context = this;
        ....
    }
    ....
}

Я также пытался с контекстом из моего класса App для получения строковых значений или чего-то еще с контекстом в классах без действий ...

public class App extends Application {
    private static Context mContext;

    @Override
    public void onCreate() {
        super.onCreate();
        mContext = this;
    }

    public static Context getContext(){
        return mContext;
    }

    public static String getStr(int resid) {
        return mContext.getResources().getString(resid);
    }
}

Когда я использую этот контекст из App.getContext();, результат такой же, после нажатия кнопки «Назад» приложение закрывается.

Вопрос: есть ли проблема с контекстом для создания ожидающего намерения и уведомления, или есть проблема с флагами создания намерения? Я перепробовал множество комбинаций с контекстами и флагами, но ни одна из них не работает. И я не могу написать (или, может быть, я не знаю) несколько слушателей по каждому виду деятельности, чтобы прослушать событие такого рода и открыть для себя новое намерение. Там будет более 50 мероприятий ...

0
Војин Петровић 18 Авг 2019 в 00:25

2 ответа

Лучший ответ

Наконец-то нашел решение, благодаря моему приятелю Мильяну.

При создании pendingIntent просто необходим правильный флаг. Так что вместо

pendingIntent = PendingIntent.getActivity(currentContext, 0, intent, 0);

Просто поставь флаг

pendingIntent = PendingIntent.getActivity(currentContext, 0, intent, PendingIntent.FLAG_ONE_SHOT);

И это работает регулярно. Я могу вернуться к предыдущему действию после отображения действия, инициированного нажатием уведомления.

0
Војин Петровић 19 Авг 2019 в 13:47

Вы должны сделать режим запуска для этого действия одним верхом <activity android:launchMode="singleTop" />

Подробнее о режиме запуска активности Android

0
Mahmoud Waked 17 Авг 2019 в 22:08