Способы вывести 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