有没有办法在c2dm消息后从通知栏中唤醒已经运行的应用程序? 我有这个在c2dm服务器上注册的应用程序,它从我的服务器接收推送通知进行一些处理。因此,当我从服务器收到c2dm消息后,它会向用户显示状态栏通知,用户会扩展通知并点击我的应用程序,然后启动它。
一切都很好,但如果此应用程序之前已经在运行(从图标开始),这会将我的应用程序的另一个实例加载到内存中。还有一些东西正在崩溃。我已经更改了android:launchMode="singleTop"
我的所有活动,我尝试在通知中使用intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
而没有运气。我总是最终运行2个应用程序。
感谢任何帮助
这里是我用来在收到c2dm消息后创建通知的静态函数:
public static void notifyStart(Context context, String notificationText) {
//notification
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(ns);
int icon = R.drawable.icon_notify;
CharSequence tickerText = notificationText;
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
notification.ledARGB = 0xff00ff00;
notification.ledOnMS = 400;
notification.ledOffMS = 400;
notification.flags |= Notification.FLAG_SHOW_LIGHTS;
notification.defaults |= Notification.DEFAULT_SOUND;
CharSequence contentTitle = "App Name";
CharSequence contentText = notificationText;
Intent notificationIntent = new Intent(context, home.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
mNotificationManager.notify(1350, notification);
}
这是我的家庭活动:
<activity android:name=".home"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar"
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
答案 0 :(得分:1)
答案 1 :(得分:0)
Android文档说:
如下表所示,模式分为两大类,一方是“standard”和“singleTop”活动,另一方面是“singleTask”和“singleInstance”活动。具有“标准”或“singleTop”启动模式的活动可以多次实例化。实例可以属于任何任务,并且可以位于活动堆栈中的任何位置。通常,它们被启动到调用startActivity()的任务中(除非Intent对象包含FLAG_ACTIVITY_NEW_TASK指令,在这种情况下,选择了不同的任务 - 请参阅taskAffinity属性)。 相比之下,“singleTask”和“singleInstance”活动只能开始一项任务。它们始终位于活动堆栈的根部。此外,设备一次只能保存一个活动实例 - 只有一个这样的任务。
所以看起来(虽然我没有检查过)singleInstance就是你要找的东西。