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ユーザーによって使用されています(この主題に関するすべての質問と回答を見ることから)。

フェイスブックアプリの最後のアップデート(1.9.11)、おそらくこのソリューションが廃止される前でさえ。これで、次の例外が発生します。

java.lang.SecurityException:パーミッション拒否:ProcessRecordからIntent {act = android.intent.action.VIEW cmp = com.facebook.katana / .ProfileTabHostActivity(has extras)}を開始しています...nullが必要です

Facebookアプリを開く方法を知っている人はいますか?

ありがとう

4

1 に答える 1

12

質問で説明されている解決策は機能しなくなります(この質問の編集で、理由の詳細を確認できます)。Facebookアプリの新しいバージョンは、これらの種類のインテントをサポートしなくなりました。ここでバグレポートを参照してください

新しい解決策は、iPhoneスキームメカニズムを使用することです(はい、FacebookはAndroidの暗黙のインテントメカニズムではなく、AndroidでiPhoneメカニズムをサポートすることを決定しました)。

したがって、ユーザープロファイルを使用して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" />

このアクティビティにはintent-filterがなくなったため、 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 に答える