任何人都知道如何在使用“返回”按钮离开应用后取消PendingIntent?当PendingIntent在一个会话中打开并取消而没有在其间退出应用程序时,它一切都很好 - 我把它覆盖了,但当我离开并重新进入时我不能再取消它而我必须等待警报。
MainActivity:
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();
}
答案 0 :(得分:1)
如果要在销毁活动后取消PendingIntent(实际上在丢失对原始PendingIntent对象的引用之后),则需要以相同的方式重新创建该对象并取消它。
因此,在尝试取消PendingIntent之前,请先创建一个PendingIntent对象。 此外,您可以直接在PendingIntent对象上调用cancel。