2012-01-04 65 views
3

这是我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); 

现在,我有我的通知吧 图标,如果我按HOME键我A2活动中,并打开另一个应用程序,然后我按我的通知图标都正常工作,并且关闭了我的A2活动(A2是最活跃的活动),但是如果在A2内部启动A3并返回HOME并按通知我遇到问题,则将A2创建为新实例(A2现在不是最上面的)!是否有可能像长时间按住HOME一样的效果并将最后一次打开的活动集中在我的应用程序中?我不想打开一个特定的活动,但在没有活动的新实例的情况下将暂停的活动放在前面。

回答

4

我已经解决了,这打开我的应用程序保存实际状态,并获得打开的活动回窗体背景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启动的第一个活动。

问候

+0

伟大的解决方案。 – user65721 2013-10-26 11:08:27

+0

不错的工作...... :) +1 – jagdish 2014-11-17 13:33:39

0

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

public void onCreate(Bundle b){ 
    super.onCreate(b); 
    finish(); 
    if(isTaskRoot()){ 
    // main Activity is not running, start it here 
    } 
} 
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); 
+0

完美工作的具体意图,坦克你非常多,但如果我也想保留活动堆栈和只专注于顶级的活动?我该怎么做? – GMG 2012-01-04 20:35:54

+0

哦,对我来说工作得很好,因为我将所有活动作为主要活动中的碎片进行托管。尝试杀死CLEAR_TOP和SINGLE_TOP标志 – ImplexOne 2012-01-04 21:59:39