我希望在应用关闭后关闭通知。
我开始相信,如果应用程序正在运行,没有像服务检查这样的黑客是不可能的。通知只会在点击时打开应用,MainActivity
在清单中定义为SingleTask
。
我使用以下代码创建通知:
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent intent = PendingIntent.getActivity(this, 0,
notificationIntent, 0);
builder.setContentTitle("...")
.setContentText("...")
.setSmallIcon(R.drawable...)
.setContentIntent(intent)
.setOngoing(true);
notifyManager.notify(R.id.lock_notification_id, builder.build());
我已尝试使用LifeCycleListener
中的onDestroy
/ Activity
取消通知,但行为确实不一致,有时通知会被销毁,有时则会会留下来。此外,按后退键会破坏通知,但不会破坏活动。
我真的很沮丧 - 这项任务不应该那么复杂。也许我错过了一面简单的旗帜?
编辑:我没有问题取消通知。但是,我不知道何时取消它,找不到我的应用程序关闭时会触发的回调。我已经在我的ActivityLifecyclecallbacks
课程的OnCreate
中尝试了Application
:
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
Log.w(TAG, "Activity " + activity.getLocalClassName() + " paused!");
}
@Override
public void onActivityStopped(Activity activity) {
Log.w(TAG, "Activity " + activity.getLocalClassName() + " stopped!");
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
}
@Override
public void onActivityDestroyed(Activity activity) {
Log.w(TAG, "Activity " + activity.getLocalClassName() + " destroyed!");
}
});
}
但是,MainActivity
被销毁时不会触发Destroy-Lifecyclecallback。
Logcatoutput将如下所示:
SettingsActivity stopped
SettingsActivity destroyed
MainActivity paused
MainActivity stopped
但主要活动没有被破坏,这正是我正在寻找的。 p>
编辑:刚刚注意到被破坏的事件有时被触发,在这种情况下,通知将自动关闭。
我在评论中被告知,当我的应用程序转到后台时,我没有收到此回调。但是,一旦从最近的应用程序中删除,我的应用程序显然已经死亡且无法正常运行。如果不是我的用例,onDestroy
回调有什么用?
有人建议尝试使用Activity isFinishing
方法,但由于Lifecyclecallbacks
在离开应用程序时都被触发,所以没有用,因为停止应用程序时没有触发,所以不是我可以使用isFinishing
的任何地方。我也试过Runtime.getRuntime().addShutdownHook()
,但也没有触发。
如果有人能指出我如何使用服务完成任务,我也会感激不尽。我已经检查了this question,但这些方法似乎是“hacky”,使用了弃用的方法,文档似乎建议不要在我的用例中使用这些方法。