Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android上发送c2dm消息后唤醒已经运行的应用程序_Android_Android C2dm - Fatal编程技术网

如何在android上发送c2dm消息后唤醒已经运行的应用程序

如何在android上发送c2dm消息后唤醒已经运行的应用程序,android,android-c2dm,Android,Android C2dm,有没有办法在收到c2dm消息后从通知栏中唤醒已经运行的应用程序? 我有一个在c2dm服务器上注册的应用程序,它从我的服务器接收推送通知以进行一些处理。所以,当我从我的服务器收到c2dm消息后,它会向用户显示状态栏通知,用户展开通知并单击我的应用程序,将其打开 一切都很好,但如果此应用程序之前已经运行过(从图标开始),则会将我的应用程序的另一个实例加载到内存中。还有一些东西在里面崩溃了。我已经在我的所有活动中更改了android:launchMode=“singleTop”,我尝试在通知中使用in

有没有办法在收到c2dm消息后从通知栏中唤醒已经运行的应用程序? 我有一个在c2dm服务器上注册的应用程序,它从我的服务器接收推送通知以进行一些处理。所以,当我从我的服务器收到c2dm消息后,它会向用户显示状态栏通知,用户展开通知并单击我的应用程序,将其打开

一切都很好,但如果此应用程序之前已经运行过(从图标开始),则会将我的应用程序的另一个实例加载到内存中。还有一些东西在里面崩溃了。我已经在我的所有活动中更改了
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