2017-01-31 8 views
-1

У меня есть LoginActivity, который является моим MAIN, а также деятельностью LAUNCHER, и у меня также есть другие виды деятельности, такие как CustomerAddActivity & CustomerListActivity.Как всегда запускать активность входа, когда приложение выходит на передний план из фона?

Теперь Предположим, что я нахожусь в CustomerAddActivity и я нажал кнопку Home и приложение переходит в фоновый режим, а когда снова приложение появляется на переднем плане он должен иметь, чтобы попросить LoginActivity первых, если действительные учетные данные (простые учетные данные, такие как имя пользователя и пин-код от sq- lite), затем обратно в CustomerAddActivity с его состоянием.

+2

Я предлагаю вам хранить учетные данные для входа в sharePreferences и проверять значения, когда onResume вызывается в everyactivity, если никакие учетные данные в sharedPreferences не перенаправляют использование на активность входа. –

+1

Вы должны, возможно, переосмыслить свою категорию, так как она будет быстро раздражать ваших пользователей, если они должны войти в систему каждый раз. Представьте, что вам нужно будет войти в приложение Gmail или Facebook или Twitter, каждый раз, когда вы захотите его использовать ... – Ridcully

+0

Я знаю, но это требование клиента. такой беспомощный – Mike

ответ

0

При возврате в приложение вы можете отправить startActivityForResult, а затем вернуться в предыдущее состояние. Для того, чтобы сделать это из любой точки мира вы можете определить абстрактный BaseActivity как это и override его от всех других классов:

public abstract class BaseActivity extends AppCompatActivity { 
    public static final int REQUEST_CODE = 1; 
    private boolean shouldCheckCredentials = false; 

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

    @Override 
    protected void onResume() { 
     if(shouldCheckCredentials){ 
      Intent loginIntent = new Intent(this,LoginActivity.class); 
      startActivityForResult(loginIntent,REQUEST_CODE); 
     } 
     super.onResume(); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(requestCode == BaseActivity.REQUEST_CODE && resultCode == RESULT_OK) { 
      shouldCheckCredentials = false; 
     } 
    } 
} 
0

вы можете передать информацию о входе в намерении при запуске CustomerAddActivity от LoginActivity

В LoginActitivity

Intent intent = new Intent(this, CustomerAddActivity.class); 
    intent.putExtra("login_info", "success"); 
    startActivity(intent); 

затем в onResume() из CustomerAddActivity() удалить эту информацию Войти

@Override 
protected void onResume() { 
    super.onResume(); 

    String login = getIntent().getStringExtra("login_info"); 
    if(login != null){ 
     getIntent().removeExtra("login_info"); 

    } else { 
     startActivity(new Intent(getApplicationContext(), LoginActivity.class)); 
    } 
} 

Таким образом, всякий раз, когда ваш клиентAddActivity приходит на передний план, он сначала проверяет login_info. Если он не мог обнаружить, что он запустит LoginAvctivity.