Подтвердить что ты не робот

Могу ли я по-прежнему получать намерение приемника трансляции после того, как я заблокировал приложение на андроиде?

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

Вы не должны добавлять 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

Ответ 4

используйте мой метод, если вы хотите запустить скрытое приложение только в первый раз, я делаю прозрачную активность 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);

Таким образом, я использую этот код для значка show 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);

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