Error de Android Facebook api 3.0: no se puede llamar a LoginActivity con un paquete de llamadas nulas

Estoy tratando de integrar una aplicación de Android con la nueva API de Facebook 3.0, pero obtengo esta excepción:

java.lang.RuntimeException: no se puede reanudar la actividad {dk.imu.konnekt / com.facebook.LoginActivity}: com.facebook.FacebookException: No se puede llamar a LoginActivity con un paquete de llamadas nulo. Esto puede ocurrir si el launchMode de la persona que llama es singleInstance.

He buscado este error, pero nadie más parece haber tenido ningún problema con él. Supongo que es porque estoy usando TabHost y TabsGroupAgrupoActividades para cada pestaña. Pero no tengo ni idea de cómo resolverlo.

He añadido el código correspondiente aquí:

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)));

        ...
    }
}

-

public class ShareGroupActivity extends TabsGroupActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startChildActivity("ShareActivity", new Intent(this, ShareActivity.class));
    }
}

-

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() && !session.isClosed() && session.getState() != SessionState.OPENING) {
            OpenRequest open = new OpenRequest(this).setCallback(statusCallback);
            List<String> permission = new ArrayList<String>();
            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);
    }
}

¿Alguna pista sobre cómo resolverlo?

Actualización de 1 pila de seguimiento:

EXCEPCIÓN FATAL: main java.lang.RuntimeException: No se puede reanudar la actividad {dk.imu.konnekt / com.facebook.LoginActivity}: com.facebook.FacebookException: No se puede llamar a LoginActivity con un paquete de llamada nulo. Esto puede ocurrir si el launchMode de la persona que llama es singleInstance. at android.app.ActivityThread.performResumeActivity (ActivityThread.java:2812) en android.app.ActivityThread.handleResumeActivity (ActivityThread.java:2851) en android.app.ActivityThread.handleLaunchActivity (ActivityThcc). ActivityThread.access $ 600 (ActivityThread.java:139) en android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1261) en android.os.Handler.dispatchMessage (Handler.java:99) android.os.Looper.loop (Looper.java:154) en android.app.ActivityThread.main (ActivityThread.java:4945) en java.lang.reflect.Method.invokeNative (Método nativo) en java.lang.reflect.Method.invoke (Method.java) : 511) en com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:784) en com.android.internal.os.ZygoteInit.main (ZygoteInit.java:551) en dalvik.system. main (Método nativo) Causado por: com.facebook.FacebookException: No se puede llamar a LoginActivity con un paquete de llamadas nulas. Esto puede ocurrir si el launchMode de la persona que llama es singleInstance. at com.facebook.LoginActivity.onResume (LoginActivity.java:110) en android.app.Instrumentation.callActivityOnResume (Instrumentation.java:1236) en android.app.Activity.performResume (Activity.java:4613) en android.app. ActivityThread.performResumeActivity (ActivityThread.java:2796) ... 12 más

Actualización 2: Revisé el código y encontré la implementación de startChildActivity:

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()); 
   }    
}

Utiliza la bandera FLAG_ACTIVITY_CLEAR_TOP. Intenté eliminarlo, pero ningún cambio en el resultado.

Actualización 3:

https://github.com/facebook/facebook-android-sdk/blob/master/facebook/src/com/facebook/LoginActivity.java

El código de Facebook utiliza

callingPackage = getCallingPackage();

y

if (callingPackage == null) {
       throw new FacebookException(NULL_CALLING_PKG_ERROR_MSG);
}

http://developer.android.com/reference/android/app/Activity.html#getCallingPackage ()

Este método tiene una nota:

Si la actividad de la llamada no está esperando un resultado (es decir, no utilizó el formulario startActivityForResult (Intent, int) que incluye un código de solicitud), el paquete de la llamada será nulo.

En el método startChildActivity, uso getLocalActivityManager (). StartActivity, en TabsGroupActivity que extiende ActivityGroup, para manejar las actividades de pestañas.http://developer.android.com/reference/android/app/LocalActivityManager.html#startActivity(java.lang.String, android.content.Intent)

Este método no hace lo que dicen las notas. No espera un resultado y no utiliza el método startActivityForResult. El método también asegura algo similar al modo de inicio de una sola instancia. ¿Cómo debo cambiar la implementación de este método, para que funcione con facebook?

Respuestas a la pregunta(4)

Su respuesta a la pregunta