如何在android上发送c2dm消息后唤醒已经运行的应用程序
有没有办法在收到c2dm消息后从通知栏中唤醒已经运行的应用程序? 我有一个在c2dm服务器上注册的应用程序,它从我的服务器接收推送通知以进行一些处理。所以,当我从我的服务器收到c2dm消息后,它会向用户显示状态栏通知,用户展开通知并单击我的应用程序,将其打开 一切都很好,但如果此应用程序之前已经运行过(从图标开始),则会将我的应用程序的另一个实例加载到内存中。还有一些东西在里面崩溃了。我已经在我的所有活动中更改了如何在android上发送c2dm消息后唤醒已经运行的应用程序,android,android-c2dm,Android,Android C2dm,有没有办法在收到c2dm消息后从通知栏中唤醒已经运行的应用程序? 我有一个在c2dm服务器上注册的应用程序,它从我的服务器接收推送通知以进行一些处理。所以,当我从我的服务器收到c2dm消息后,它会向用户显示状态栏通知,用户展开通知并单击我的应用程序,将其打开 一切都很好,但如果此应用程序之前已经运行过(从图标开始),则会将我的应用程序的另一个实例加载到内存中。还有一些东西在里面崩溃了。我已经在我的所有活动中更改了android:launchMode=“singleTop”,我尝试在通知中使用in
android:launchMode=“singleTop”
,我尝试在通知中使用intent.setFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP)
,但没有成功。我最后总是运行两个应用程序
谢谢你的帮助
这里是我的静态函数,用于在收到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>
Android文档说明: 如下表所示,这些模式分为两大类,一类是“标准”和“单实例”活动,另一类是“单任务”和“单实例”活动。具有“标准”或“单顶”启动模式的活动可以多次实例化。实例可以属于任何任务,并且可以位于活动堆栈中的任何位置。通常,它们被启动到名为startActivity()的任务中(除非Intent对象包含FLAG_ACTIVITY_NEW_task指令,在这种情况下,选择了不同的任务-请参见taskafficity属性)。 相反,“singleTask”和“singleInstance”活动只能开始一项任务。它们始终位于活动堆栈的根。此外,该设备一次只能保存一个活动实例-只有一个这样的任务 所以看起来(尽管我没有检查)singleInstance就是您要寻找的
请看:各位,我非常抱歉,但这是我的错:|几天前,我决定更改我的应用程序包的名称,但忘了从手机中删除旧应用程序。我没有意识到这会导致在我的手机上安装两个独立的应用程序,任务管理器只显示应用程序名称,因此看起来同一个应用程序有两个实例,实际上每个都有一个实例;)很抱歉给您带来麻烦,并感谢您的帮助:)您能在您的AndroidManifest中发布家庭活动条目吗?@Guy-我在上面发布了我的家庭活动。也许您应该通过通知专门启动一个单独的活动。这样,你的整个应用程序就不会从头开始(home)@binnyb-我必须回到主屏幕,那里的操作是:)你知道,我只是注意到,如果我从图标启动应用程序,当一个应用程序已经从我的通知启动时,重复的应用程序也正在创建。。。有什么想法吗?你有没有考虑过使用
singleInstance
的launchMode
?