как разбудить уже запущенное приложение после сообщения c2dm на android

есть ли способ разбудить уже запущенное приложение из панели уведомлений после сообщения c2dm? У меня есть это приложение, зарегистрированное на серверах c2dm, которое получает push-уведомления с моего сервера для выполнения некоторой обработки. поэтому после того, как я получаю сообщение 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>

person android-developer    schedule 09.03.2011    source источник
comment
Не могли бы вы опубликовать запись о домашней активности в своем AndroidManifest?   -  person Guy    schedule 09.03.2011
comment
@Guy - я разместил свою домашнюю активность выше   -  person android-developer    schedule 09.03.2011
comment
возможно, вам следует запустить отдельную активность специально для запуска через уведомление. таким образом, все ваше приложение не запускается с самого начала (дом)   -  person james    schedule 09.03.2011
comment
@binnyb - мне нужно вернуться на главный экран, где происходит действие :) знаете, я только что заметил, что если я запускаю приложение из значка, когда одно из них уже запущено из моего уведомления, создается дубликат приложения а также ... есть идеи?   -  person android-developer    schedule 09.03.2011
comment
Вы изучали возможность использования launchMode из singleInstance? developer.android.com/guide/topics/manifest/   -  person james    schedule 09.03.2011


Ответы (2)


ребята, мне очень жаль, но это была моя вина :| пару дней назад я решил изменить название пакета своего приложения и забыл удалить старое приложение с телефона. я не осознавал, что это вызовет две отдельные установки на моем телефоне, диспетчер задач отображает только имя приложения, так что это выглядело так, будто было два экземпляра одного и того же приложения, на самом деле было по одному экземпляру каждого;) извините за беспокойство и ценю вашу готовность помочь :)

person android-developer    schedule 09.03.2011

В документации Android говорится:

Как показано в таблице ниже, режимы делятся на две основные группы: действия «стандартный» и «singleTop» с одной стороны и действия «singleTask» и «singleInstance» с другой. Активность с режимом запуска «стандартный» или «singleTop» может создаваться несколько раз. Экземпляры могут принадлежать любой задаче и могут располагаться в любом месте стека действий. Обычно они запускаются в задаче, вызвавшей startActivity() (если только объект Intent не содержит инструкции FLAG_ACTIVITY_NEW_TASK, в этом случае выбирается другая задача — см. атрибут taskAffinity). Напротив, действия «singleTask» и «singleInstance» могут только начать задачу. Они всегда находятся в корне стека действий. Более того, на устройстве одновременно может находиться только один экземпляр активности — только одна такая задача.

поэтому кажется (хотя я не проверял), что singleInstance - это то, что вы ищете.

см.: http://bit.ly/gH8SBb

person Guy    schedule 09.03.2011