2013-04-13 192 views
3

我已經在我的應用程序中包含Fb登錄,當我點擊「登錄」按鈕(com.facebook.widget.LoginButton)時,它將在登錄之前用對話框打開額外的活動,如下面的圖片。爲什麼發生這種情況?我不想在登錄前打開這個額外的活動。任何想法如何做到這一點?Android - facebook sdk問題

enter image description here

enter image description here

我的主要活動:

public class MainActivity extends SherlockFragmentActivity { 

    //Button fblogin; 
    Button signup_with_email; 
    Button log_in; 
    private UiLifecycleHelper uiHelper; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     uiHelper = new UiLifecycleHelper(this, null); 
     uiHelper.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     initialize(); 
     setListeners(); 

    } 

    private void initialize() { 
     //fblogin = (Button) findViewById(R.id.login_button); 
     signup_with_email = (Button) findViewById(R.id.signup_with_email); 
     log_in = (Button) findViewById(R.id.log_in); 
    } 

    private void setListeners() { 

     /*fblogin.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

      } 
     }); 
*/ 
     signup_with_email.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       startActivity(new Intent(MainActivity.this, 
         EmailSignUpActivity.class)); 
      } 
     }); 

     log_in.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       startActivity(new Intent(MainActivity.this, LoginActivity.class)); 
      } 
     }); 
    } 

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

    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     uiHelper.onSaveInstanceState(outState); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     uiHelper.onActivityResult(requestCode, resultCode, data); 
     startActivity(new Intent(MainActivity.this, DashBoardActivity.class)); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     uiHelper.onPause(); 
    } 

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

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getSupportMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

} 

回答

2

我對晚會有點遲,但接受的答案是錯誤的。

在挖掘了SDK代碼之後,我發現:Facebook爲登錄過程啓動com.facebook.LoginActivity,並且因爲您沒有指定自定義主題,所以它會顯示在屏幕截圖中。這是的JavaDoc爲LoginActivity:

這種活性是整體Facebook登錄 過程的必要部分,但並不意味着被直接使用。將此活動添加到您的AndroidManifest.xml的 以確保正確處理Facebook登錄。

他們建議使用Theme.Translucent.NoTitleBar:

<activity android:name="com.facebook.LoginActivity" 
    android:theme="@android:style/Theme.Translucent.NoTitleBar" 
    android:label="@string/app_name" /> 

但是,如果您使用建議的主題活動將是半透明的,但仍顯示在中間有一個不確定的進度(動畫加載符號)。

就個人而言,我更喜歡使用DialogFragment指示加載過程,並不會顯示Facebook的LoginActivity都:

<activity 
    android:name="com.facebook.LoginActivity" 
    android:theme="@android:style/Theme.NoDisplay" /> 
1

您作爲第二個參數UiLifecycleHelper的構造函數傳遞空。你需要傳遞一個Session.StatusCallback的實例。 Facebook的SDK的教程通常表明這是一個最終場在你的活動這樣

private Session.StatusCallback callback = 
    new Session.StatusCallback() { 
    @Override 
    public void call(Session session, 
      SessionState state, Exception exception) { 
     onSessionStateChange(session, state, exception); 
    } 
}; 

然後你實現onSessionStateChange做任何你需要做的會話被打開或關閉時......在你的情況下,它看起來像當會話狀態變爲打開時,您想要啓動DashBoardActivity。

在任何情況下,您都會看到一個對話框,因爲在Facebook SDK中,SSO過程控制會暫時傳遞給本地Facebook應用程序進行授權。一旦授權完成控制傳遞basck Session.StatusCallback被調用。

+0

我加入了Session.StatusCallback如u建議,但存在同樣的問題,當我點擊在登錄按鈕上,它打開另一個對話框,然後打開facebook應用程序進行授權 –

+0

但是,我創建另一個示例應用程序只有登錄按鈕,它工作正常。這裏是我的其他代碼工作正常http://pastebin.com/QjMg7xdS –

+0

在這種情況下,UiLifeCycleHelper與簡單顯示的額外活動無關,因此這不能解決Suresh的問題。解決方案很簡單,請參閱我的答案瞭解詳情。 – wkarl