2012-07-18 3 views
0

4 가지 활동이 있다고 가정 해보십시오. Login, Sync, Main, Details.로그인이있는 응용 프로그램의 개념

MainDetails은 사용자가 로그인하여 동기화 단계를 통과 한 경우에만 액세스 할 수 있습니다. Main은 서랍의 아이콘에서 액세스 할 수 있습니다. DetailsMain 및 알림에서 액세스 할 수 있습니다.

30 분 동안 사용하지 않으면 사용자가 로그 오프됩니다 (서비스 타이머 사용). .

나는 여기에 사용자가 로그인되어 있는지 확인하기 위해 수행해야하는 방법을 잘 모르겠습니다 내 두 가지 시나리오 있습니다 : 아이콘은 사용자가 로그인하면 확인 Login을 시작

  • 는 다음 Synch을 시작합니다 , 동일한 것을하고 Main를 발사한다.
  • 아이콘이 실행되면 사용자가 로그인했는지 확인하는 Main가 실행되고 그렇지 않은 경우 Login이 실행됩니다. Login가 닫히면 뒤쪽 스택에있는 Main이 표시됩니다.

그리고 그런 다음이 Main 이외의 활동을 시작 할 수 있기 때문에

두 번째 시나리오는 나에게 더 정확한 것 같다. 또한 사용자가 로그인 한 경우 검사에 필요 Details이 있지만, 강제 사용자가 로그인해야하는 모든 활동에 체크 코드를 복사합니다. (두 가지 이상의 활동이 있습니다).

왜 그렇게해야합니까? 왜?

+0

왜 당신의 서비스 여부를 결정하지 :

정말 잘 작동하고 깔끔하게 캡슐화 된 모든 :

편집 여기

을 유지하는 것은 당신이 원하는대로 수정하는 코드입니다 사용자가 로그인했는지 여부 당신이 가진 모든 활동은 당신의 서비스에 묶일 것입니다. – DroidBender

답변

2

당신은 모든 검사 코드를 구현하는 BaseActivity을 확장 할 수 있습니다, 당신이 사용하는 새로운 Activity 그것이 내장되어 있습니다.

을 나는에 로그인하지 않고 활동의 접근 50 %를 가지고있는 응용 프로그램에서 이것을 사용 startActivityForResult(...)을 사용하여 로그인 시도의 성공 또는 실패를 알리는 프롬프트를 표시합니다.

/** 
* This is an abstract class that all Activities will be based on. 
*/ 
public abstract class BaseActivity extends ActionBarActivity 
{ 
    protected static final int SHOW_WALLET  = 100; 
    protected static final int SHOW_OFFER_DETAIL = 101; 
    protected static final int REGISTER   = 102; 
    protected static final int SHOW_ACCOUNT  = 103; 

    protected static final int LOGGED_IN_OK  = 103; 
    protected static final int REGISTERED_OK  = 104; 

    protected static final int DIALOG_DELAY  = 300; 
    // for passing data in extras 
    protected static final String TEXT_SEARCH  = "text_search"; 
    protected static final String SEARCH_TERM  = "search_term"; 

    protected boolean    mAlternateTitle = false; 
    private Dialog    loading; 
    private Runnable    showDialog; 

     protected final void openAccount() 
     { 
      Intent i; 
      if (LoginManager.getInstance().isLoggedIn()) 
      { 
       i = new Intent(this, MyAccountActivity.class); 
       startActivity(i); 
      } 
      else 
      { 
       i = new Intent(this, LoginActivity.class); 
       startActivityForResult(i, SHOW_ACCOUNT); 
      } 
     } 

} 
+0

이것은 최상의 솔루션처럼 들립니다. –

+0

이것은 좋은 것 같습니다. 그러나 BaseActivity의 하위 클래스가 "login"과 동일한 requestCode를 사용하지 않도록해야합니다. – Jonas

+0

액세스 할 수있는 BaseActivity 상수로 CODE_ACTIVITY_XYZ 상수를 보호하십시오. BaseActivity 추상화도 너무 단순하게 유지하는 데 도움이됩니다. – ScouseChris