PendingIntent.getActivity с FLAG_UPDATE_CURRENT не будет обновлять флаги намерения - PullRequest
1 голос
/ 13 марта 2019

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Toast.makeText(this, "onNewIntent", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent a = new Intent(this, MainActivity.class);
        Intent b = new Intent(this, MainActivity.class);
        b.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent pia = PendingIntent.getActivity(this, 1, a, 0);
        PendingIntent pib = PendingIntent.getActivity(this, 1, b, PendingIntent.FLAG_UPDATE_CURRENT);
        try {
            pib.send();
        } catch (PendingIntent.CanceledException e) {
            e.printStackTrace();
        }
    }

}

При использовании приведенного выше кода при запуске Activity вместо всплывающего тоста "onNewIntent" вызывается новая функция MainActivity, игнорирующая флаг FLAG_ACTIVITY_SINGLE_TOP.

Но если я изменю FLAG_UPDATE_CURRENT на FLAG_CANCEL_CURRENT, проблема решена.

Это ошибка Android? Я тестирую это на эмуляторе под управлением Android Pie.

Есть ли способ обновить флаг PendingIntent?

1 Ответ

1 голос
/ 14 марта 2019

Когда вы используете PendingIntent.FLAG_UPDATE_CURRENT, это приводит только к обновлению "extras" в Intent . Он ничего не делает с флагами Intent.

Если вы хотите изменить флаги Intent, вам нужно либо использовать 2 разных PendingIntent с (например, с использованием requestCode с), либо вам нужно отменить существующий PendingIntent и создать новый.

...