Могу ли я по-прежнему получать намерения приемника вещания после принудительной остановки приложения на Android? - PullRequest
12 голосов
/ 11 февраля 2012

Простой вопрос.Случается ли так, что я все еще получаю зарегистрированные приемники широковещания после принудительной остановки приложения?

Ответы [ 4 ]

27 голосов
/ 11 февраля 2012

Случается ли, что я все еще получаю зарегистрированные приемники вещания после принудительной остановки приложения?

В Android 3.1+ нет.Как только пользователь принудительно остановит ваше приложение, вы больше не будете получать широковещательные сообщения Intents, пока пользователь вручную не запустит одно из ваших действий.

1 голос
/ 23 января 2017

Вы не должны добавлять FLAG_INCLUDE_STOPPED_PACKAGES к намерениям вашего получателя, которые начинают вашу деятельность или услугу.Вы должны добавить его к намерению, которое вы используете для sendBroadcast.Это означает, что вам нужно добавить его к намерению в приложении, которое вызывает Broadcast.

Вот как вы должны запустить свой приемник из другого приложения:

      Intent intent = new Intent("com.xxx.my_filter_intent");
      intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
      this.sendBroadcast(intent);

Если у вас нет контроля над этой трансляцией (например, если это системная трансляция), и нет такойфлаг внутри - тогда ваше приложение не будет запущено этой трансляцией, если оно находится в состоянии принудительной остановки.

Подробнее здесь: http://developer.android.com/about/versions/android-3.1.html#launchcontrols

0 голосов
/ 02 сентября 2017

используйте мой метод, если вы хотите запустить скрытое приложение только в первый раз, когда я выполняю прозрачное действие Launcher, подобное этому

<activity android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Transparent"
android:excludeFromRecents="true"
>
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Поэтому я делаю приложение скрытым в панели запуска, помещая этот код в oncreat ()

PackageManager p = getPackageManager();
ComponentName componentName = new ComponentName(this, MainActivity.class);
p.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

Поэтому я использую этот код для отображения значка приложения на панели запуска и запускаю его в классе обслуживания, использующем загрузку широковещательного приемника, и в классе широковещательного приема сетевого подключения (autostart.java и networkConnectinCheck.java):

PackageManager p = context.getPackageManager();
ComponentName componentName = new ComponentName(context, MainActivity.class);
p.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

Теперь я могу запустить приложение впервые руками пользователя, и после этого я использую приложение своего приемника для обеда в любое время.

0 голосов
/ 11 февраля 2012

если ваши получатели зарегистрированы в AndroidManifest, то да, ваше приложение все равно будет их получать. С другой стороны, если вы регистрируетесь с помощью кода (в службе / деятельности), то приложение не получит его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...