Android Facebook api 3.0-Fehler: LoginActivity kann nicht mit einem NULL-Aufrufpaket aufgerufen werden

Ich versuche, eine Android-App in die neue Facebook 3.0-API zu integrieren, aber ich bekomme diese Ausnahme:

java.lang.RuntimeException: Aktivität kann nicht fortgesetzt werden {dk.imu.konnekt / com.facebook.LoginActivity}: com.facebook.FacebookException: LoginActivity kann nicht mit einem Null-Aufruf-Paket aufgerufen werden. Dies kann auftreten, wenn der launchMode des Aufrufers singleInstance ist.

Ich habe nach diesem Fehler gesucht, aber sonst scheint niemand etwas damit zu tun zu haben. Ich vermute, es liegt daran, dass ich für jede Registerkarte einen TabHost und TabsGroupActivities verwende. Aber ich habe keine Ahnung, wie ich es lösen soll.

Ich habe den entsprechenden Code hier hinzugefügt:

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

Irgendwelche Hinweise, wie man es löst?

Update 1 Stack Trace:

FATALE AUSNAHME: main java.lang.RuntimeException: Aktivität kann nicht fortgesetzt werden {dk.imu.konnekt / com.facebook.LoginActivity}: com.facebook.FacebookException: LoginActivity kann nicht mit einem Paket ohne Aufruf von null aufgerufen werden. Dies kann auftreten, wenn der launchMode des Aufrufers singleInstance ist. 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 und. ActivityThread.access $ 600 (ActivityThread.java:139) bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1261) bei android.os.Handler.dispatchMessage (Handler.java:99) android.os.Looper.loop (Looper.java:154) bei android.app.ActivityThread.main (ActivityThread.java:4945) bei java.lang.reflect.Method.invokeNative (Native Method) bei java.lang.reflect.Method.invoke (Method.java : 511) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:784) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:551) bei dalvik.system.NativeStart. main (native Methode) Auslöser: com.facebook.FacebookException: LoginActivity kann nicht mit einem null-Aufrufpaket aufgerufen werden. Dies kann auftreten, wenn der launchMode des Aufrufers singleInstance ist. 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 weitere

Update 2: Ich habe den Code durchgesehen und die Implementierung von startChildActivity gefunden:

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

Es wird das Flag FLAG_ACTIVITY_CLEAR_TOP verwendet. Ich habe versucht, es zu entfernen, aber keine Änderung des Ergebnisses.

Update 3:

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

Der Facebook-Code verwendet

callingPackage = getCallingPackage();

und

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

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

Diese Methode hat einen Hinweis:

Wenn die aufrufende Aktivität kein Ergebnis erwartet (das heißt, sie hat nicht das Formular startActivityForResult (Intent, int) verwendet, das einen Anforderungscode enthält), ist das aufrufende Paket null.

In der Methode startChildActivity verwende ich den getLocalActivityManager (). StartActivity in TabsGroupActivity, der ActivityGroup erweitert, um Tab-Aktivitäten zu verarbeiten.http://developer.android.com/reference/android/app/LocalActivityManager.html#startActivity(java.lang.String, android.content.Intent)

Diese Methode entspricht nicht den Angaben in den Notizen. Es erwartet kein Ergebnis und verwendet nicht die Methode startActivityForResult. Die Methode stellt auch etwas sicher, das dem SingleInstance-LaunchMode ähnelt. Wie soll ich diese Methodenimplementierung ändern, damit sie mit Facebook funktioniert?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage