PendingIntent.getActivity 和 FLAG_UPDATE_CURRENT 不会更新意图的标志

PendingIntent.getActivity with FLAG_UPDATE_CURRENT won't update intent's flags


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”toast,而是调用新的 MainActivity,忽略 FLAG_ACTIVITY_SINGLE_TOP 标志。

但如果我将 FLAG_UPDATE_CURRENT 更改为 FLAG_CANCEL_CURRENT,问题就解决了。

这是 Android 的错误吗?我正在模拟器上测试这个 运行 Android Pie.

有什么方法可以更新 PendingIntent 的标志吗?

当您使用 PendingIntent.FLAG_UPDATE_CURRENT 时,此 只会导致 Intent 中的 "extras" 更新 。它对 Intent 标志没有任何作用。

如果您想更改 Intent 标志,您需要使用 2 个不同的 PendingIntent(例如,使用不同的 requestCode),或者您需要取消现有的 PendingIntent 并创建一个新的。