c2dm приемник не работает, когда приложение было убито - PullRequest
2 голосов
/ 15 сентября 2011

В манифесте в теге приложения у меня есть:

<receiver
    android:name=".MyC2dmReceiver"
    android:permission="com.google.android.c2dm.permission.SEND">
    <!-- Receive the actual message -->
    <intent-filter>
        <action
            android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category
            android:name="com.my.app" />
    </intent-filter>
    <!-- Receive the registration id -->
    <intent-filter>
        <action
            android:name="com.google.android.c2dm.intent.REGISTRATION" />
        <category
            android:name="com.my.app" />
    </intent-filter>
</receiver>

И мой прием имеет что-то подобное

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals("com.google.android.c2dm.intent.REGISTRATION")) {
        handleRegistration(context, intent);
    } else if (intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) {
        handleMessage(context, intent);
    }
}

Когда мое приложение включено или работает в фоновом режиме, onReceive метод запускается, но когда я убиваю приложение с помощью AdvancedTaskKiller, onRecived перестает получать. Почему?

Почему Android не запускает мой приемник? Нужно ли что-то в манифесте?

1 Ответ

1 голос
/ 15 сентября 2011

Почему?

Если вы используете Android 3.1 или новее, это потому, что ваше приложение было переведено в состояние остановки. Это также происходит, если пользователь принудительно останавливает вас через приложение «Настройки». Пока пользователь снова не запустит ваше приложение (например, не нажмет значок в панели запуска), ни один из ваших BroadcastReceivers не будет работать.

...