具有FLAG_UPDATE_CURRENT的PendingIntent.getActivity将不会更新意图的标志

时间:2019-03-13 09:39:53

标签: android android-pendingintent


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 个答案:

答案 0 :(得分:1)

使用PendingIntent.FLAG_UPDATE_CURRENT时,此仅导致Intent中的“附加”被更新。它对Intent标志没有任何作用。

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