2012-06-22 4 views
3

Я испытываю небольшую боль на Android. У меня есть два действия: один - это экран заставки, который запускается при нажатии на значок приложения и другой, который может проснуться, когда произошло определенное событие (событие NFC, но это не проблема).Как я могу настроить действие, которое будет возобновлено (по многозадачности)

Существует декларация в манифесте:

<activity android:label="@string/general.appName" android:name=".activity.SplashActivity" android:screenOrientation="portrait"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 

      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 
<activity android:excludeFromRecents="true" android:label="@string/general.appName" android:name=".EventReceiver" android:noHistory="true" android:screenOrientation="portrait"> 
     <intent-filter> 
      <action android:name="android.nfc.action.TRANSACTION_DETECTED"> 
      </action> 

      <category android:name="android.intent.category.DEFAULT"> 
      </category> 

      <data android:host="secure" android:path="/aXXXXX" android:port="0" android:scheme="nfc"/> 
     </intent-filter> 
    </activity> 

Все работает нормально, это означает, что EventReceiver запускается, когда он получил определенное событие, Splash Screen функциональна и т.д ... Но, когда приложение запускается событием, поэтому сначала запускается EventReceiver. Если я приостанавливаю приложение, нажав на кнопку дома на телефоне, и, долго нажимая на нее снова, появляется многозадачная таблица со всеми недавними открытыми приложениями. Там, я нажимаю на свое приложение, он возобновил приложение в EventReceiver, как если бы произошло событие. Итак, вы знаете способ возобновления приложения только в одном выбранном действии (в моем случае SplashScreen). Или вы знаете способ узнать, что приложение было возобновлено с помощью многозадачной функции? (Я мог бы открыть хорошую активность в onCreate моего EventReceiver, если я получу эту информацию).

На данный момент единственным решением, которое я нашел, является установка флага android: excludeFromRecents = "true" в моей активности EventReceiver. Это приведет к тому, что приложение не будет отображаться в многозадачной таблице, если приложение было запущено событием. Но это немного сложно, и мне это не очень нравится.

Есть ли у вас идеи?

Спасибо за ваши ответы! (и извините за моего ученого English ^^)

ответ

2

Если вам действительно нужно определить, когда приложение выбрано из «recents», вы можете использовать флаги намерений.

if (getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) { 
    // Lauched from recent apps. 
} 
+0

Я попробую это немедленно. –

+0

Спасибо, он отлично работает в моем случае, просто используя ваш код и: if ((getIntent () .getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY)! = 0) { \t \t startActivity (новое намерение (это, HomeActivity.класс)); \t \t отделка(); \t \t} –

0

НЕ используйте заставку. Это только замедляет работу вашего приложения и не имеет ценности, что когда-либо.

Кроме того ... Приложения для Android - это потерянный набор действий ... Нет конкретной точки входа, для которой необходим экран заставки.

При этом ... коммутатор приложений возвращает вас к ранее активному действию. В вашем случае .EventReceiver. Вы можете изменить свою структуру, используя второе действие, которое показывает ваш ui, чтобы EventReceiver позволял вам переходить к этому.

Исправьте меня, если я ошибаюсь ... Но вы не можете перехватить событие nfc с помощью ресивера? Оттуда вы должны открыть свою деятельность ui.

+0

Для SplashScreen, это не я, кто хочет, у меня есть некоторые обязательства ^^ Но это не вопрос, я мог бы сказать, что HomeActivity это один, что я хочу быть возобновлена. Фактически, когда я возобновляю многозадачность, это похоже на то, что система Android зарегистрировала само событие, и я получаю его снова, поэтому запускается EventReceiver. Чтение события немного длинное (1-2 секунды), поэтому у меня есть этот EventReceiver. Если бы я открыл свою деятельность до этого, я буду думать о такой же проблеме :( –

Смежные вопросы

 Смежные вопросы