如何通过通知将Android现有活动带到前面

时间:2010-07-28 18:20:34

标签: android

我有一个Android应用程序,当它运行服务时,我想在状态栏上显示通知。然后用户可以通过按HOME键导航到其他应用程序。但是,当我尝试通过通知图标将之前运行的应用程序恢复到Front时,现有活动存在一些问题。即使我将其声明为“单顶”模式(我想运行现有的活动,因为有关联的服务正在运行),不知何故,在OnResume之前已经调用了活动的OnDestroy。这是我创建通知对象的代码。你能指点我错了吗?谢谢。

private void showNotification ()
{

  Intent toLaunch = new Intent(getApplicationContext(),
                                          MySingleTopActivity.class);

  PendingIntent intentBack = PendingIntent.getActivity(getApplicationContext(),   0,toLaunch, PendingIntent.FLAG_UPDATE_CURRENT);

  notification.setLatestEventInfo(getApplicationContext(),
         getText(R.string.GPS_service_name), text, intentBack);
....
}

4 个答案:

答案 0 :(得分:23)

private void showNotification() {
    Intent toLaunch = new Intent(getApplicationContext(), MySingleTopActivity.class);

    //add these two lines will solve your issue
    toLaunch.setAction("android.intent.action.MAIN");
    toLaunch.addCategory("android.intent.category.LAUNCHER");

    PendingIntent intentBack = PendingIntent.getActivity(getApplicationContext(), 0, toLaunch, PendingIntent.FLAG_UPDATE_CURRENT);

    notification.setLatestEventInfo(getApplicationContext(), getText(R.string.GPS_service_name), text, intentBack);
    ...
}

答案 1 :(得分:8)

我建议你这样做,

private void showNotification () 
{

Intent toLaunch = new Intent(getApplicationContext(), DummyActivity.class);

// You'd need this line only if you had shown the notification from a Service
toLaunch.setAction("android.intent.action.MAIN");

PendingIntent intentBack = PendingIntent.getActivity(getApplicationContext(), 0,toLaunch, PendingIntent.FLAG_UPDATE_CURRENT);

.... 
}

DummyActivity应该只是一个总是在oncreate事件中完成的活动。

在清单文件中,添加以下行

<activity class=".DummyActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
    </intent-filter>
</activity>

我希望这会有所帮助......

答案 2 :(得分:0)

启动软件包意图的另一种方法。

private void NotificationwithLaucherSelfPackage(Context context , int notification_id){
        Notification noti = new Notification.Builder(context)
                .setContentTitle("Your Title")
                .setContentText("Your Text")
                .setSmallIcon(R.drawable.abc_ic_menu_share_mtrl_alpha)
                .setContentIntent(PendingIntent.getActivity( context ,notification_id , getLauncherIntent(context) , PendingIntent.FLAG_UPDATE_CURRENT))
                .build();
        NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
    }

private Intent getLauncherIntent(Context context){
        return context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
    }

答案 3 :(得分:-2)

当活动在后台时,Android可能会随时终止活动以释放资源。有关生命周期的完整详细信息,请参阅Activity文档。

您的活动需要准备好在onPause或onSaveInstanceState方法中保存其状态。上面引用的文档提供了有关保存持久状态的其他详细信息。