使用FLAG_UPDATE_CURRENT的PendingIntent.getActivity不会更新intent的标志

问题描述 投票:1回答:1

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启动时,弹出一个新的MainActivity,而不是弹出“onNewIntent”toast,忽略FLAG_ACTIVITY_SINGLE_TOP标志。

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

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

有没有办法更新PendingIntent标志?

android android-pendingintent
1个回答
1
投票

当你使用PendingIntent.FLAG_UPDATE_CURRENT时,这只会导致更新Intent中的“extras”。它对Intent旗帜没有任何作用。

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

© www.soinside.com 2019 - 2024. All rights reserved.