2013-12-19 1 views
1

Мое приложение появится всплывающее окно, чтобы сообщить пользователю после входа пользователя в систему, который реализован с помощью Activity.FLAG_ACTIVITY_MULTIPLE_TASK не работает на Android 4.4 KitKat

Это займет некоторое время для приложения, чтобы общаться с бэкэнд сервер, и пользователь может нажать кнопку «Home» кнопку, чтобы временно выйти из приложения во время входа в систему.

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

Код работает нормально до 4.4 KitKat. На Android 4.4, даже если я установил флаг на Intent, который запустил Activity, заставка по-прежнему переходит на передний план, когда приложение находится в фоновом режиме.

Любое возможное решение для этого?

ответ

0

Проблема, похоже, не связана с FLAG_ACTIVITY_MULTIPLE_TASK.

В Android 4.3, Activity начато с неактивного Activity также неактивно. Но в Android 4.4, Activity запущена форма неактивной Activity будет перенесена на передний план.

Поэтому я добавил кучу кода, чтобы решить эту проблему:

добавить isPaused свойство BaseAcitity, который является базовым классом для всех видов деятельности в моем приложении.

public class BaseActivity extends FragmentActivity { 

    public static final String START_FROM_PAUSED_ACTIVITY_FLAG = "START_FROM_PAUSED_ACTIVITY_FLAG"; 

    protected boolean paused = false; 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     paused = true; 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     paused = true; 
    } 

    public boolean isPaused() { 
     return paused; 
    } 
} 

Затем, когда я начинаю начать SplashActivity, я положу значение isPaused в намерениях.

Intent intent = new Intent(activity, SplashActivity.class); 

boolean isStartingFromBackgroundActivity = activity.isPaused(); 
intent.putExtra(BaseActivity.START_FROM_PAUSED_ACTIVITY_FLAG, isStartingFromBackgroundActivity); 

startActivity(intent); 

и проверить значение isPaused в onCreate обратного вызова в SplashAcitivity и нажмите SplashAcitivty фону, если значение истинно.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if (isStartedFromBackgroundActivity()) 
     moveTaskToBack(true); 

} 

private boolean isStartedFromBackgroundActivity() { 
    return getIntent().getBooleanExtra(START_FROM_PAUSED_ACTIVITY_FLAG, false); 
} 

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

  • Нет связанных вопросов^_^