如何以与Android Launcher相同的方式启动应用程序(恢复)

时间:2013-08-15 01:51:15

标签: android android-intent android-activity launcher

关于如何在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())。有没有办法从我的应用程序中以编程方式触发相同的恢复流程?

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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);

主要关注意图标志

答案 2 :(得分:-1)

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

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