title: Android Facebook api 3.0 error: Cannot call LoginActivity with a null calling package
body: <p>I am trying to integrate an android app with the the new facebook 3.0 api, but I get this exception:</p>
  
  <blockquote>
    <p>java.lang.RuntimeException: Unable to resume activity
    {dk.imu.konnekt/com.facebook.LoginActivity}:
    com.facebook.FacebookException: Cannot call LoginActivity with a null
    calling package. This can occur if the launchMode of the caller is
    singleInstance.</p>
  </blockquote>
  
  <p>I have search for this error but no one else seems to have had any troble with it. I guess it is because I am using a TabHost and TabsGroupActivities for each tab. But I have no clue on how to solve it. </p>
  
  <p>I have added the relevant code here:</p>
  
  <pre><code>public class MainTabActivity extends TabActivity {    
      public void onCreate(Bundle savedInstanteState){
          super.onCreate(savedInstanteState);
          setContentView(R.layout.tab_layout);
          TabHost tabHost = getTabHost();
  
          View shareTab = getLayoutInflater().inflate(R.layout.share_tab, null);
          tabHost.addTab(tabHost.newTabSpec("Share").setIndicator(shareTab)
          .setContent(new Intent(MainTabActivity.this, ShareGroupActivity.class)));
  
          ...
      }
  }
  </code></pre>
  
  <p>-</p>
  
  <pre><code>public class ShareGroupActivity extends TabsGroupActivity {
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          startChildActivity("ShareActivity", new Intent(this, ShareActivity.class));
      }
  }
  </code></pre>
  
  <p>-</p>
  
  <pre><code>public class ShareActivity extends BaseActivity {
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.share);
  
          testFacebookConnection();
      }
  
      public void testFacebookConnection(){
          Session session = new Session(this);
          Session.setActiveSession(session);
          SessionState state = session.getState();
  
          Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
  
          Session.StatusCallback statusCallback = 
              new Session.StatusCallback() {
              @Override
              public void call(Session session, SessionState state, Exception exception) {
                  Toast.makeText(ShareActivity.this, "Facebook session status changed", Toast.LENGTH_SHORT).show(); 
              }
          };
  
          if (!session.isOpened() &amp;&amp; !session.isClosed() &amp;&amp; session.getState() != SessionState.OPENING) {
              OpenRequest open = new OpenRequest(this).setCallback(statusCallback);
              List&lt;String&gt; permission = new ArrayList&lt;String&gt;();
              permission.add("publish_actions");
              open.setPermissions(permission);
              session.openForPublish(open);
          } else {
              Session.openActiveSession(this, true, statusCallback);
          }
      }   
  
      @Override
      public void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
          Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
      }
  }
  </code></pre>
  
  <p>Any clue on how to solve it?</p>
  
  <p><strong>Update 1 stack trace:</strong></p>
  
  <blockquote>
    <p>FATAL EXCEPTION: main java.lang.RuntimeException: Unable to resume
    activity {dk.imu.konnekt/com.facebook.LoginActivity}:
    com.facebook.FacebookException: Cannot call LoginActivity with a null
    calling package. This can occur if the launchMode of the caller is
    singleInstance. at
    android.app.ActivityThread.performResumeActivity(ActivityThread.java:2812)
    at
    android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2851)
    at
    android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2234)
    at android.app.ActivityThread.access$600(ActivityThread.java:139) at
    android.app.ActivityThread$H.handleMessage(ActivityThread.java:1261)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    android.os.Looper.loop(Looper.java:154) at
    android.app.ActivityThread.main(ActivityThread.java:4945) at
    java.lang.reflect.Method.invokeNative(Native Method) at
    java.lang.reflect.Method.invoke(Method.java:511) at
    com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) at
    dalvik.system.NativeStart.main(Native Method) Caused by:
    com.facebook.FacebookException: Cannot call LoginActivity with a null
    calling package. This can occur if the launchMode of the caller is
    singleInstance. at
    com.facebook.LoginActivity.onResume(LoginActivity.java:110) at
    android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1236)
    at android.app.Activity.performResume(Activity.java:4613) at
    android.app.ActivityThread.performResumeActivity(ActivityThread.java:2796)
    ... 12 more</p>
  </blockquote>
  
  <p><strong>Update 2:</strong>
  I looked through the code and found the implementation of startChildActivity:</p>
  
  <pre><code>public void startChildActivity(String Id, Intent intent) {     
     Window window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
     if (window != null) {
         mIdList.add(Id);
         setContentView(window.getDecorView()); 
     }    
  }
  </code></pre>
  
  <p>It uses the flag FLAG_ACTIVITY_CLEAR_TOP. I tried to remove it, but no change in the outcome.</p>
  
  <p><strong>Update 3:</strong></p>
  
  <p><a href="https://github.com/facebook/facebook-android-sdk/blob/master/facebook/src/com/facebook/LoginActivity.java">https://github.com/facebook/facebook-android-sdk/blob/master/facebook/src/com/facebook/LoginActivity.java</a></p>
  
  <p>The Facebook code uses </p>
  
  <pre><code>callingPackage = getCallingPackage();
  </code></pre>
  
  <p>and </p>
  
  <pre><code>if (callingPackage == null) {
         throw new FacebookException(NULL_CALLING_PKG_ERROR_MSG);
  }
  </code></pre>
  
  <p><a href="http://developer.android.com/reference/android/app/Activity.html#getCallingPackage%28%29">http://developer.android.com/reference/android/app/Activity.html#getCallingPackage()</a></p>
  
  <p>This method has a note: </p>
  
  <blockquote>
    <p>If the calling activity is not expecting a result (that is it did not
    use the startActivityForResult(Intent, int) form that includes a
    request code), then the calling package will be null.</p>
  </blockquote>
  
  <p>In the method startChildActivity I use the getLocalActivityManager().startActivity, in TabsGroupActivity that extends ActivityGroup, to handle tab activities.
  <a href="http://developer.android.com/reference/android/app/LocalActivityManager.html#startActivity%28java.lang.String,%20android.content.Intent%29">http://developer.android.com/reference/android/app/LocalActivityManager.html#startActivity(java.lang.String, android.content.Intent)</a></p>
  
  <p>This method does not what the notes says. It does not expect a result and does not use the startActivityForResult method. The method also ensures something similar to singleinstance launchmode.
  How should I change this method implementation, so it can work with facebook?</p>