如何使用通知栏从服务中调用活动

时间:2012-01-04 19:54:00

标签: android

这是我的sistuation

A1 =启动屏幕活动

A2 =主要活动

A3 =额外活动

S1 = GPS服务

我从A1开始,创造了启动A2然后A1完成的意图。 在A2内部,我创建并绑定S1(在S1内部我发出通知)

CharSequence text = getText(R.string.local_service_started);

Notification notification = new Notification(R.drawable.notify_icon, text, System.currentTimeMillis());

Intent i = new Intent();
i.setClassName("xxx.yyy.zzz.kkk", "xxx.yyy.zzz.kkk.A2");
i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

PendingIntent contentIntent = PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);

notification.setLatestEventInfo(this, getText(R.string.local_service_label), text, contentIntent);
mNM.notify(NOTIFICATION, notification);

现在我在通知栏中显示了我的图标 如果我按下我的A2活动中的HOME按钮并打开另一个应用程序,然后我按下我的通知图标一切正常工作,我关闭我的A2活动(A2是最活跃的),但如果在A2内我启动A3并返回HOME并按下通知我有问题,A2被创建为一个新实例(A2现在不是最顶层)!可以像长按HOME那样产生效果并将最后一次打开的活动集中在我的应用程序中吗?我不想打开特定的活动,但是在没有新活动实例的情况下将我暂停的活动带到前面。

3 个答案:

答案 0 :(得分:5)

我已经解决了,这打开了我的应用程序,保留了实际状态并将打开的活动恢复为foregraund的背景。同样想到应用程序从RECENTS中选择!

Intent i = new Intent();
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
i.setComponent(new ComponentName(getApplicationContext().getPackageName(), MyAppClass.class.getName()));

MyAppClass是您的APK正在启动的第一个活动。

祝你好运

答案 1 :(得分:0)

您可以创建一个在onCreate()中完成的活动,并从您的通知中启动该活动。

public void onCreate(Bundle b){
  super.onCreate(b);
  finish();
  if(isTaskRoot()){
  // main Activity is not running, start it here
  }
}

答案 2 :(得分:0)

这可能与另一个问题重复,但我没有找到完整的答案,所以通过反复试验......你必须设置动作和类别。尝试一下。

final Intent notificationIntent = new Intent(context.getApplicationContext(),                           MainActivity.class);
notificationIntent.putExtra("extra", "value");
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                        | Intent.FLAG_ACTIVITY_SINGLE_TOP);
notificationIntent.setAction("android.intent.action.MAIN");
notificationIntent.addCategory("android.intent.category.LAUNCHER");

final PendingIntent contentIntent = PendingIntent
                        .getActivity(this, 0, notificationIntent,0); // didn't work: PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT);