2015-02-24 3 views
3

ПроблемаApplication Level onResume Android

Идея очень проста. Всякий раз, когда пользователь возвращается к моему приложению в реестре, я хочу показать простой диалог с паролем.

Я знаю, как вызывать диалог с паролем, но моя проблема в том, как я понимаю, что пользователь ввел мое приложение из ретентатов. Если я помещаю приглашение в onResume в каждом действии, он будет запускаться каждый раз, даже если пользователь не войдет в меню «Рекурсоры».

В моем приложении много действий и фрагментов. Таким образом, я хотел бы иметь более общий или прикладной уровень решения.

+0

реализовать onResume метод этой деятельности. –

+1

@GopalSinghSirvi Как я уже говорил, если я это сделаю, он будет срабатывать каждый раз, даже если пользователь не будет входить из ретентатов. –

ответ

2

Вы можете попробовать с этим флагом FLAG_ACTIVITY_LAUNCHER_FROM _HISTORY:

if((getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY)!=0){ 
    Log.d(TAG, "Called from history"); 
    //clear flag from history 
    Intent intent = getIntent().setFlags(getIntent().getFlags() & (~ Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY)); 
    setIntent(intent); 
} 

Источник: Android - detecting application launch from home or history

Когда активность "А" начинается с недавно, этот флаг. Теперь этот флаг будет также присутствовать, если действие «A» вызывает действие «B», а на «B» пользователь нажимает. Таким образом, вы должны проверить флаг и когда вы его обнаружить у вас есть ясное намерение, удалив этот флаг, источник: Remove a Paint Flag in Android

+0

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

+0

@Aritra Добро пожаловать – LaurentY

+0

Я только что проверил, что это не решает мою проблему. Если я перейду от одной активности к другой и вернусь, то также начнет срабатывать onRestart. Мне нужен способ запросить пароль только тогда, когда он будет возобновлен с ретентатов. –

1

Try ниже образца

/** 
* TODO : After update to API level 14 (Android 4.0), 
* We should implement Application.ActivityLifecycleCallbacks 
*/ 
public class GlobalApplication extends android.app.Application 
{ 
    private boolean inForeground = true; 
    private int resumed = 0; 
    private int paused = 0; 

    public void onActivityResumed(Activity activity) 
    { 
     ++resumed; 

     if(!inForeground) 
     { 
      // Don't check for foreground or background right away 
      // finishing an activity and starting a new one will trigger to many 
      // foreground <---> background switches 
      // 
      // In half a second call foregroundOrBackground 
     } 
    } 

    public void onActivityPaused(Activity activity) 
    { 
     ++paused; 

     if(inForeground) 
     { 
      // Don't check for foreground or background right away 
      // finishing an activity and starting a new one will trigger to many 
      // foreground <---> background switches 
      // 
      // In half a second call foregroundOrBackground 
     } 
    } 

    public void foregroundOrBackground() 
    { 
     if(paused >= resumed && inForeground) 
     { 
      inForeground = false; 
     } 
     else if(resumed > paused && !inForeground) 
     { 
      inForeground = true; 
     } 
    } 
} 

Put ниже код в ваших всех видов деятельности.

public class BaseActivity extends android.app.Activity 
{ 
    private GlobalApplication globalApplication; 

    @Override 
    protected void onCreate() 
    { 
     globalApplication = (GlobalApplication) getApplication(); 
    } 

    @Override 
    protected void onResume() 
    { 
     super.onResume(); 
     globalApplication.onActivityResumed(this); 
    } 

    @Override 
    protected void onPause() 
    { 
     super.onPause(); 
     globalApplication.onActivityPaused(this); 
    } 

    @Override 
    public void onDestroy() 
    { 
     super.onDestroy(); 
    } 
} 
+0

Я попробую это и скажу вам. –

5

Реализовать Application.ActivityLifecycleCallbacks, что обеспечит все активности обратного вызова в своем классе приложений.


public class AppController extends Application implements 
Application.ActivityLifecycleCallbacks 
{ 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
    } 


    @Override 
    public void onActivityCreated(Activity activity, Bundle bundle) { 

    } 

    @Override 
    public void onActivityStarted(Activity activity) { 

    } 

    @Override 
    public void onActivityResumed(Activity activity) { 

    } 

    @Override 
    public void onActivityPaused(Activity activity) { 

    } 

    @Override 
    public void onActivityStopped(Activity activity) { 

    } 

    @Override 
    public void onActivitySaveInstanceState(Activity activity, Bundle bundle) { 

    } 

    @Override 
    public void onActivityDestroyed(Activity activity) { 

    } 
}