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

时间:2015-04-09 19:33:51

标签: android android-pendingintent

任何人都知道如何在使用“返回”按钮离开应用后取消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();
}

1 个答案:

答案 0 :(得分:1)

如果要在销毁活动后取消PendingIntent(实际上在丢失对原始PendingIntent对象的引用之后),则需要以相同的方式重新创建该对象并取消它。

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