重新进入应用程序后释放 PendingIntent

Releasing PendingIntent after reentering app

任何人都知道如何在使用返回按钮离开应用程序后取消 PendingIntent?当 PendingIntent 在一个会话中打开并取消时,中间没有退出应用程序,那么一切都很好 - 我得到了它,但是当我离开并重新进入时,我不能再取消它,我必须等待警报。

主要活动:

b5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setCall(12000);
                pendingIntent.cancel();
                if (alarmManager!= null) {
                    alarmManager.cancel(pendingIntent);
                }
            }
        });

public void setCall(int timeToCall){
    if (alarmManager!= null) {
        alarmManager.cancel(pendingIntent);
    }
    String name = e1.getEditableText().toString();
    //Toast.makeText(getApplicationContext(), name, Toast.LENGTH_SHORT).show();
    Intent intent = new Intent(MainActivity.this, ThisBroadcastReceiver.class);
    intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
    intent.putExtra("name",name);
    pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            SystemClock.elapsedRealtime() + timeToCall, pendingIntent);
}

广播接收器:

@Override
public void onReceive(Context context, Intent intent) {
    String name = intent.getExtras().getString("name");

    Intent i = new Intent(context, CallScreen.class);
    i.setClassName("(package)", "(classname)");
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    i.putExtra("name2", name);
    context.startActivity(i);
    Toast.makeText(context, name, Toast.LENGTH_SHORT).show();
}

如果您想在 activity 被销毁后取消 PendingIntent(实际上是在失去对原始 PendingIntent 对象的引用之后),您需要以相同的方式重新创建该对象并取消它。

因此,在尝试取消之前创建一个 PendingIntent 对象。 此外,您可以直接在 PendingIntent 对象上调用取消。