1

背景

我正在尝试在 facebook 应用程序上打开特定的个人资料页面(当然,当安装了 facebook 应用程序时)。

问题

我注意到,如果我作为最终用户转到 facebook 应用程序的应用程序信息屏幕(我可以在其中卸载应用程序,清除其缓存等...)并选择“强制停止”,然后尝试打开个人资料页面,facebook 应用程序本身要么崩溃,要么甚至无法启动。

如果 facebook 应用程序已经在运行,则代码可以正常工作。

编码

context.getPackageManager().getPackageInfo("com.facebook.katana", 0);
final String facebookScheme = String.format("fb://profile/%s", socialNetworkUid);
final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(facebookScheme));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY
        | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
return intent;

顺便说一句,该方案是从这个链接中找到的。

问题

  • 为什么会发生?
  • 我能以某种方式避免它吗?
  • 它是 facebook 应用程序上的错误还是我没有正确实现它?
  • 我现在真的需要检查 FB 应用程序是否处于活动状态,然后才允许使用此意图吗?如果是这样,如何?
4

1 回答 1

2

以下代码对我来说没有问题,无论 Facebook 应用程序是否打开。

public void goToFacebook(String id) {

    try {
        getPackageManager().getPackageInfo("com.facebook.katana", 0);
        Intent facebookPage = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/"+id));
        startActivity(facebookPage);
    } catch (Exception e) {
        Intent launchBrowser = new Intent(Intent.ACTION_VIEW, Uri.parse("http://facebook.com/"+id));
        startActivity(launchBrowser);
    }

}

如您所见,我正在使用 try/catch 来检测是否安装了 FB 应用程序。如果 Facebook 应用程序已经启动,它将移动到个人资料,否则它将启动应用程序,然后打开个人资料。

如果未安装 Facebook 应用程序,我会将用户发送到浏览器中的个人资料页面。

编辑

在我的应用程序中多次打开 Facebook 应用程序后,我设法重现了您在我的测试设备上看到的相同内容。我可以在 LogCat 中看到以下错误,因此这似乎是 Facebook 应用程序的错误:

10-10 14:43:01.406: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.facebook.katana/com.facebook.katana.IntentUriHandler}: java.lang.IllegalStateException: FbSharedPreferences used before initialized

于 2013-10-10T13:28:35.060 回答