Способы вывести Android-приложение в фоновом режиме на передний план

вот сценарий:

AndroidManifest.xml определяет одно действие с android:launchMode="singleTask". (Это означает, что в стеке должно быть одно действие на протяжении всего жизненного цикла приложения, верно ?)

во время Activity.onCreate(), вещательный приемник программно создается и прослушивает входящие SMS. Приемник остается активным даже после Activity.onPause() конструкция.

когда пользователь закончит с приложением, он нажимает на устройство Главная кнопка, которая вызывает Activity.onPause() и приложение исчезает. Устройство показывает затем домашний экран Android.

при получении SMS, приемники вещания получает SMS и пытается показать деятельность через:

Intent it = new Intent(context, Akami.class);
it.setAction(Intent.ACTION_MAIN);
it.addCategory(Intent.CATEGORY_LAUNCHER);
it.setComponent(new ComponentName(context.getPackageName(), "MyActivity"));
it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(it);

однако активность не отображается пользователю.

  • а) почему ?
  • b) каковы возможные способы вывести Activty на передний план ?

2 ответов


на MyMainActivity определения (AndroidManifest.XML-код):

<intent-filter>
 <action android:name="intent.my.action" />
 <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

программно выводя приложение на передний план:

Intent it = new Intent("intent.my.action");
it.setComponent(new ComponentName(context.getPackageName(), MyMainActivity.class.getName()));
it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.getApplicationContext().startActivity(it);

Примечание: context.startActivity(it) не будет работать, когда context объект такой же, как деятельность, которую вы хотите поднять.


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

ОС Android может принимать вашу деятельность от onPause() до onStop() и onDestroy () в зависимости от системных ресурсов. Поэтому в таком случае ваша вызывающая активность снова перезапустится, поэтому примите меры предосторожности. Иначе, очень легко столкнуться с NullPointerExceptions