2

关于如何在 Android 应用程序中启动应用程序有很多问题/答案。但是这些解决方案不会产生与在 Android 启动器中点击图标相同的流程。例如,我这样做(这与通知一起使用):

intent = context.getPackageManager().getLaunchIntentForPackage("com.test.startup");
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

pendingIntent = PendingIntent.getActivity(context, 0,
            intent, PendingIntent.FLAG_UPDATE_CURRENT);

然后,当我点击通知应用程序启动时,它的启动方式与我点击应用程序抽屉中的图标时有所不同。具体来说:使用这种方法,我的主要活动总是被创建(即 onCreate() 然后 onResume() 被调用)。但是,如果应用程序已经启动然后放在后台,那么从 Launcher 启动它只会导致当前显示的活动的 onResume() 被调用(而不是主要活动的 onCreate())。有没有办法从我的应用程序中以编程方式触发相同的恢复流程?

总结任务:当用户点击通知时,我需要启动我的应用程序(如果它还没有),或者以其当前状态(如果它在后台)被带到前台并将一些数据传递给它。然后,该应用程序将负责处理/呈现该数据。

4

3 回答 3

1

您的应用程序正在按照应有的方式运行。即使您尝试从 App 抽屉启动应用程序,它也会调用相同的回调。您必须了解生命周期。由于您的活动在后台,因此不会调用 onCreate。但是为了处理来自通知意图的数据,您应该在活动中使用回调方法 OnNewIntent()。您应该重写此方法并从新意图中提取数据并更新 UI。在 onNewIntent onresume 之后会被调用。我希望这能解决你的问题。

于 2015-01-09T05:04:29.460 回答
0

这是我的 onPause 代码,它按您预期的方式工作,即当用户单击通知时,它不会再次调用 onCreate:

notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
        intent = new Intent(getApplicationContext(), PlayerActivity.class);     
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent pIntent = PendingIntent.getActivity(getBaseContext(), 0, intent,0);
        NotificationCompat.Builder noti =
                new NotificationCompat.Builder(this)
                .setSmallIcon(android.R.drawable.ic_media_play)
                .setContentTitle("Nepali Music And more")
                .setContentText("Playing");
    noti.setContentIntent(pIntent);
    noti.setAutoCancel(true);
    noti.setOngoing(true);
     Notification notification = noti.getNotification();


        notificationManager.notify(1, notification);

主要关注意图标志

于 2013-08-15T01:56:41.020 回答
-1

您想使用意图标志Intent.FLAG_ACTIVITY_CLEAR_TOP来查找您的活动并清除其上方的堆栈。您还需要该Intent.FLAG_ACTIVITY_SINGLE_TOP标志来防止重新创建您的活动(以恢复)。

Intent.FLAG_ACTIVITY_SINGLE_TOP是必要的,因为默认情况下,启动模式是“标准”,它允许您创建活动的多个实例。如果您要将启动模式设置为SingleTop,则不需要此标志

于 2013-08-15T02:37:59.680 回答