gpt4 book ai didi

Android Facebook SDK : Back-Button woes

转载 作者:行者123 更新时间:2023-11-29 00:40:27 26 4
gpt4 key购买 nike

我正在使用 Facebook Android SDK 从我的 Android 应用程序登录并发布到用户的墙上。 Facebook 发布例程是一个独立于我的主应用程序的 Intent。

当没有网络连接或信号不好时,我希望能够点击后退按钮(硬件)并取消 facebook Intent。我可以捕获后退按钮并返回到我的主应用程序,但 facebook SDK 必须启动一个仍在尝试打开连接的线程。

在我取消后大约一分钟,主应用程序崩溃,因为 facebook 连接线程超时并在我的 AuthListener 中返回控制权。

AndroidRuntime  E  android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@40bb3de0 is not valid; is your acti
vity running?
26860 AndroidRuntime E at android.view.ViewRoot.setView(ViewRoot.java:447)
26860 AndroidRuntime E at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:283)
26860 AndroidRuntime E at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:193)
26860 AndroidRuntime E at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:118)
26860 AndroidRuntime E at android.view.Window$LocalWindowManager.addView(Window.java:532)
26860 AndroidRuntime E at android.app.Dialog.show(Dialog.java:269)
26860 AndroidRuntime E at com.facebook.android.FbDialog$FbWebViewClient.onPageStarted(FbDialog.java:180)
26860 AndroidRuntime E at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:265)
26860 AndroidRuntime E at android.os.Handler.dispatchMessage(Handler.java:99)
26860 AndroidRuntime E at android.os.Looper.loop(Looper.java:132)
26860 AndroidRuntime E at android.app.ActivityThread.main(ActivityThread.java:4123)
26860 AndroidRuntime E at java.lang.reflect.Method.invokeNative(Native Method)
26860 AndroidRuntime E at java.lang.reflect.Method.invoke(Method.java:491)
26860 AndroidRuntime E at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
26860 AndroidRuntime E at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
26860 AndroidRuntime E at dalvik.system.NativeStart.main(Native Method)

如何优雅地取消 Facebook 连接过程?

最佳答案

如果它对其他人有帮助,我必须在 finish() 之前专门删除 authListeners 和 LoginListeners,这样在连接线程终止后它们就不会获得控制权。

if (mAuthListener != null)
{
Log.d (TAG, "removing listerners");
SessionEvents.removeAuthListener (mAuthListener);
SessionEvents.removeLogoutListener (mLogoutListener);
}

在Facebook FbDialog.java 库源中,我还需要进行一些更改。线程(我认为是网络连接器)仍会运行,完成后,尝试显示登录页面。然而,没有任何观点可以做到这一点,事情变得非常糟糕。我从 onReceivedError() 方法中获取了取消例程,但我没有发明错误代码或描述,而是将 mListener.onError... 更改为 mListener.cancel()。到目前为止似乎工作正常......

// FbDialog.java
// --------------------------------------------------------------------------
private boolean mCanceled = false;

...

    public boolean onKeyDown (int keyCode, KeyEvent event)
{
// cancel everything if hardware Back button is hit
if (keyCode == KeyEvent.KEYCODE_BACK)
{
mCanceled = true;

if (mSpinner != null)
if (mSpinner.isShowing ())
mSpinner.cancel ();

mListener.onCancel ();
FbDialog.this.dismiss ();
return (true);
}

return (false);
}

...

    protected void onCreate (Bundle savedInstanceState)
{
mCanceled = false;
...
}

public void onPageStarted (WebView view, String url, Bitmap favicon)
{
...
// only show the progress dialog if we've not been canceled
// this was part of the problem with leaked memory after canceling
if (mCanceled == false)
mSpinner.show ();
}

...

    public void onPageFinished (WebView view, String url)
{
// only dismiss if dialog is showing
if (mSpinner.isShowing ())
mSpinner.dismiss ();
}

关于Android Facebook SDK : Back-Button woes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9739241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com