5

可能重复:
从其他应用程序启动 facebook 应用程序

直到几天前,为了向我的用户显示另一个用户配置文件,我使用了以下解决方案:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClassName("com.facebook.katana", "com.facebook.katana.ProfileTabHostActivity");
Long uid = new Long("123456789");
intent.putExtra("extra_user_id", uid);
startActivity(intent);

许多 stackoverflow 用户都使用此解决方案(从查看有关此主题的所有问题和答案)。

上一次 facebook 应用程序更新 (1.9.11),甚至可能在此解决方案过时之前。现在您将获得以下异常:

java.lang.SecurityException: Permission Denial: 从 ProcessRecord 开始 Intent { act=android.intent.action.VIEW cmp=com.facebook.katana/.ProfileTabHostActivity (has extras) } ... 需要 null

有谁知道我现在如何打开 facebook 应用程序?

谢谢

4

1 回答 1

12

问题中描述的解决方案将不再起作用(在此问题的编辑中,您可以查看原因的详细信息)。新版本的 facebook 应用程序不再支持这些意图。请参阅此处的错误报告

新的解决方案是使用 iPhone 方案机制(是的,facebook 决定在 Android 中支持 iPhone 机制,而不是 Android 的隐式 Intent 机制)。

因此,要使用用户个人资料打开 facebook 应用程序,您需要做的就是:

String facebookScheme = "fb://profile/" + facebookId;
Intent facebookIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(facebookScheme)); 
startActivity(facebookIntent);

如果您正在寻找其他操作,您可以使用以下页面获取所有可用操作(但您必须对其进行测试,因为我没有找到关于此的 facebook 官方出版物)

编辑

这部分问题提供了有关问题性质和解决方案的更多详细信息,但以上详细信息足以解决问题。

使用新版本的 facebook 应用程序,清单文件已更改。今天的活动

com.facebook.katana.ProfileTabHostActivity

在清单中以以下方式描述:

<activity android:theme="@style/Theme.Facebook"
android:name="com.facebook.katana.ProfileTabHostActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout"
android:windowSoftInputMode="adjustPan" />

由于此活动不再有意图过滤器,因此android:exported的默认值现在为false。在以前的版本中,有intent-filter,然后默认值为true(欢迎您在这里阅读)我要感谢这个答案关于导出值的详细信息。

但新版本有以下活动:

<activity android:name="com.facebook.katana.IntentUriHandler">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="facebook" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="fb" />
        </intent-filter>
    </activity>

在这里你可以看到他们支持fbfacebook方案。

于 2012-10-28T09:57:06.290 回答