只要app正在运行,就会持续发出通知

时间:2016-02-17 19:41:04

标签: android android-notification-bar

我希望在应用关闭后关闭通知。 我开始相信,如果应用程序正在运行,没有像服务检查这样的黑客是不可能的。通知只会在点击时打开应用,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

但主要活动没有被破坏,这正是我正在寻找的。

编辑:刚刚注意到被破坏的事件有时被触发,在这种情况下,通知将自动关闭。 我在评论中被告知,当我的应用程序转到后台时,我没有收到此回调。但是,一旦从最近的应用程序中删除,我的应用程序显然已经死亡且无法正常运行。如果不是我的用例,onDestroy回调有什么用?

有人建议尝试使用Activity isFinishing方法,但由于Lifecyclecallbacks在离开应用程序时都被触发,所以没有用,因为停止应用程序时没有触发,所以不是我可以使用isFinishing的任何地方。我也试过Runtime.getRuntime().addShutdownHook(),但也没有触发。

如果有人能指出我如何使用服务完成任务,我也会感激不尽。我已经检查了this question,但这些方法似乎是“hacky”,使用了弃用的方法,文档似乎建议不要在我的用例中使用这些方法。

0 个答案:

没有答案