92

私はAndroidアプリを持っており、他のアプリを介したテキストの送信をサポートしています。したがって、ACTION_SENDインテントとEXTRA_TEXTフィールドを使用します。セレクターは、そのような意図を処理できるすべてのアプリを私に提示します。それらはTwitter、Eメール、...そしてFacebookです。しかし、Facebookを選択すると、ブラウザが開き、次のページに移動します。

http://m.facebook.com/sharer.php?u=mytext

テキストと送信ボタンが表示されます。しかし、送信ボタンを押しても何も起こりません。ページが再び読み込まれます。Facebookアプリ経由でしかURLを送信できないのではないかと思います。それでいいの?

ACTION_SENDFacebook Androidアプリを介してテキストを送信できた人はいますか?

4

10 に答える 10

51

共有をFacebookアプリで機能させるには、少なくとも1つのリンクが必要です。

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "Wonderful search engine http://www.google.fr/");
startActivity(Intent.createChooser(intent, "Share with"));

これにより正しい共有ウィンドウが表示されますが、共有をクリックしても何も起こりません(公式のTwitterアプリでも試しましたが、機能しません)。

Facebookアプリの共有を機能させるために私が見つけた唯一の方法は、テキストのないリンクのみを共有することです。

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "http://www.google.fr/");
startActivity(Intent.createChooser(intent, "Share with"));

次のウィンドウが表示され、[共有]ボタンが機能します。

Facebookでシェア

どうやらそれは共有に移入するためにリンクから画像とテキストを自動的に取得します。

テキストのみを共有する場合は、Facebook APIを使用する必要があります:https ://github.com/facebook/facebook-android-sdk

于 2011-02-11T08:35:23.390 に答える
46

2013年6月:

  • これはFacebookのバグであり、コードではありません
  • Facebookはこのバグを修正しません、彼らは彼らがAndroid共有システムを壊したのは「設計による」と言います: https ://developers.facebook.com/bugs/332619626816423
  • SDKを使用するか、URLのみを共有します。
  • ヒント:投稿のテキストとしてWebページのタイトルを使用して少しごまかすことができます。
于 2013-06-05T07:28:04.637 に答える
29

まず、ハンドラー共有オプションへのクエリインテントが必要です。次に、パッケージ名を使用してインテントをフィルタリングすると、ハンドラー共有オプションのインテントが1つだけになります。

Facebookで共有する

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Content to share");
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList) {
    if ((app.activityInfo.name).contains("facebook")) {
        final ActivityInfo activity = app.activityInfo;
        final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
        shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |             Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        shareIntent.setComponent(name);
        v.getContext().startActivity(shareIntent);
        break;
   }
}

ボーナス-Twitterで共有

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Content to share");
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList) {
    if ("com.twitter.android.PostActivity".equals(app.activityInfo.name)) {
        final ActivityInfo activity = app.activityInfo;
        final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
        shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |             Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        shareIntent.setComponent(name);
        v.getContext().startActivity(shareIntent);
        break;
   }
}

また、別の共有アプリケーションを介して共有する方法を知りたい場合は、TépBlog-Androidを介した事前共有をご覧ください。

于 2012-04-13T20:41:12.863 に答える
11

編集済み:Android用の公式Facebookアプリの新しいリリース(2011年7月14日)でITは機能します!!!

OLD:上記の例は、ユーザーがFacebookアプリを共有用に選択した場合は機能しませんが、ユーザーがSeesmicアプリを選択してFacebookに投稿した場合は機能します。SeesmicはFacebookよりもFacebookAPIの実装が優れていると思います。

于 2011-06-13T05:49:35.057 に答える
11

回避策がありますが、共有しているページを制御できることを前提としています...

EXTRA_TEXTをそのようにフォーマットすると...

String myText = "Hey!\nThis is a neat pic!";
String extraText = "http://www.example.com/myPicPage.html?extraText=\n\n" + myText;

...次に、Facebook以外のアプリでは、テキストは次のように表示されます。

http://www.example.com/myPicPage.html?extraText=

ねえ!
これはすてきな写真です!

ここで、extraTextクエリパラメータを使用したリクエストがページのメタデータ内のextraTextのコンテンツを返すように、Webサイトを更新するとします。

<!-- Make sure to sanitize your inputs! e.g. http://xkcd.com/327/ -->
<meta name="title" content="Hey! this is a neat pic!">

次に、FacebookがそのURLをエスケープしてダイアログを生成すると、タイトルのメタデータが読み取られ、共有ダイアログに埋め込まれます。

私はこれがかなり厄介な解決策であることを理解しているので、一粒の塩を持っていってください...

于 2012-12-21T01:08:31.203 に答える
2

Facebookアプリがこの意図を誤って処理しているようです。最も信頼できる方法は、Android用のFacebookAPIを使用することのようです。

SDKは次のリンクにあります:http://github.com/facebook/facebook-android-sdk

'usage'の下に、これがあります:

Facebookダイアログを表示します。

SDKは、ウォールポストの作成など、ユーザーとの対話のためにいくつかのWebViewhtmlダイアログをサポートしています。これは、ネイティブのAndroid UIを実装し、APIを介して直接Facebookにデータを渡すことなく、迅速なFacebook機能を提供することを目的としています。

これはそれを行うための最良の方法のようです-壁に投稿するダイアログを表示します。唯一の問題は、彼らが最初にログインしなければならないかもしれないということです

于 2010-09-14T21:02:22.470 に答える
1
Check this out : By this we can check activity results also....
// Open all sharing option for user
                    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); 
                    sharingIntent.setType("text/plain");                    
                    sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, ShortDesc+" from "+BusinessName);
                    sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, ShortDesc+" "+ShareURL);
                    sharingIntent.putExtra(Intent.EXTRA_TITLE, ShortDesc+" "+ShareURL);
                    startActivityForResult(Intent.createChooser(sharingIntent, "Share via"),1000);
/**
     * Get the result when we share any data to another activity 
     * */
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch(requestCode) {
        case 1000:
            if(resultCode == RESULT_OK)
                Toast.makeText(getApplicationContext(), "Activity 1 returned OK", Toast.LENGTH_LONG).show();
            else
                Toast.makeText(getApplicationContext(), "Activity 1 returned NOT OK", Toast.LENGTH_LONG).show();
            break;
        case 1002:
            if(resultCode == RESULT_OK)
                Toast.makeText(getApplicationContext(), "Activity 2 returned OK", Toast.LENGTH_LONG).show();
            break;
        }// end switch



    }// end onActivityResult
于 2013-12-12T12:21:28.843 に答える
1
ShareDialog shareDialog = new ShareDialog(this);
if(ShareDialog.canShow(ShareLinkContent.class)) {

    ShareLinkContent linkContent = new ShareLinkContent.Builder().setContentTitle(strTitle).setContentDescription(strDescription)
                            .setContentUrl(Uri.parse(strNewsHtmlUrl))
                            .build();
    shareDialog.show(linkContent);

}
于 2016-12-07T16:23:50.787 に答える
0

これは2011年4月に報告されたFacebookアプリのバグであり、AndroidFacebook開発者によってまだ修正されていないようです。

現時点での唯一の回避策は、SDKを使用することです。

于 2011-09-25T17:39:52.987 に答える
0

テキストを表示したい場合は、メッセージの最初にを付けて、ハッシュタグとして共有します

于 2016-07-24T06:55:07.437 に答える