2012-05-01 115 views

回答

0

除了活動以外的其他地方,無法在Facebook對象內授權。

你可以嘗試通過一些網絡服務來獲得訪問令牌和初始化

Facebook facebook 

這一點。不過,您可以在活動中授權您的會話並通過活頁夾傳遞它。

這是我的例子。

這是一個服務

public class ClientService extends Service { 

    //Facebook object to operate from service 
    private Facebook facebook; 

... 

    private final ClientBinder clientBinter = new ClientBinder(); 

    /** Binder to service */ 
    public class ClientBinder extends Binder { 

     public ClientService getService() { 
      return ClientService.this; 
     } 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return clientBinter; 
    } 

    public void setFacebook(Facebook f) { 
     ClientService.this.facebook = f; 
    } 

    public boolean loggedFacebook() { 
     if (facebook == null) 
      return false; 
     return facebook.isSessionValid(); 
    } 
    ... 

} 

這是從活動使用

public class SomeActivity extends Activity{ 

     private ClientService clientService; 
     private ServiceConnection clientConnection = new ServiceConnection() { 

      public void onServiceDisconnected(ComponentName name) { 
       mBound = false; 
      } 

      public void onServiceConnected(ComponentName name, IBinder service) { 
       ClientService.ClientBinder binder = (ClientService.ClientBinder) service; 
       clientService = binder.getService(); 
       mBound = true; 
       if (facebook != null) 
        if (facebook.isSessionValid()) 
         clientService.setFacebook(facebook); 
      } 
     }; 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     Intent intent = new Intent(this, ClientService.class); 
     bindService(intent, clientConnection, Context.BIND_AUTO_CREATE); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     if (mBound) { 
      unbindService(clientConnection); 
      mBound = false; 
     } 

    } 


................. 

    //And HERE IS MAGIC 
    ..... 
    private void logINFacebook() { 
      if (facebook.isSessionValid()) 
       return; 

      facebook.authorize(this, 
        getResources().getStringArray(R.array.facebookPermissions), 
        new DialogListener() { 
         public void onFacebookError(FacebookError e) {...} 

         public void onError(DialogError e) {...} 

         public void onComplete(Bundle values) { 
          if (mBound) { 
           clientService.setFacebook(facebook); 
          } 

          //Save to shared preferences(optional) 
          SharedPreferences.Editor editor = prefs.edit(); 
          editor.putString(FACEBOOK_TOKEN_PREFNAME, 
            facebook.getAccessToken()); 
          editor.putLong(FACEBOOK_EXPIRES_PREFNAME, 
            facebook.getAccessExpires()); 
          editor.commit(); 
         } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     facebook.authorizeCallback(requestCode, resultCode, data); 
     super.onActivityResult(requestCode, resultCode, data); 
    } 

    }