重新进入应用程序后释放 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 对象上调用取消。
任何人都知道如何在使用返回按钮离开应用程序后取消 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 对象上调用取消。