8

AndroidジェリービーンからFacebook経由で画像とテキストを共有したいと思います。Androidジェリービーンを除くすべてのデバイスで機能します。誰でもこの問題を解決する方法を教えてください。

私のコード

  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);

                System.out.println("package name"+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;

このコードでは、いくつかのテキストを意図したいと考えています。しかし、EXTRA_TEXT が機能していません。この EXTRA_TEXT で文字列または画像を渡す方法。

4

3 に答える 3

6

Facebook だけを直接ターゲットにするべきではありません。

代わりに、共有インテントを使用する必要があります。SDK で指定されているようにエクストラでデータを渡し、ユーザーに共有先を選択してもらいます。Facebookだけがソーシャル メディアではないので、強制的に Facebook を使用させないでください。Twitter、4square、およびユーザーが使用する他の多くのものもあります。これらのアプリにインテントを処理させます。インテント アクションが意図された方法ではないACTION_SENDため、そのような厳密な制限を指示しないでください。

エクストラの問題に関しては、EXTRA_TEXT画像やそのような参照には使用されないため、明らかに意図は機能しません。

ドキュメントを読む

http://developer.android.com/reference/android/content/Intent.html#ACTION_SEND

それは言います:

SEND インテントを起動するときは、通常、(createChooser(Intent, CharSequence) を介して) セレクターでラップする必要があります。これにより、ユーザーがデータの送信方法を選択するための適切なインターフェイスが提供され、送信内容を示すプロンプトを指定できるようになります。やっている。

入力: getType() は、送信されるデータの MIME タイプです。get*Extra には、送信するデータを含む EXTRA_TEXT フィールドまたは EXTRA_STREAM フィールドを含めることができます。EXTRA_TEXT を使用する場合、MIME タイプは「text/plain」にする必要があります。それ以外の場合は、EXTRA_STREAM 内のデータの MIME タイプにする必要があります。MIME タイプが不明な場合は/を使用します(これにより、一般的なデータ ストリームを処理できる送信者のみが許可されます)。EXTRA_TEXT を使用する場合は、オプションで EXTRA_HTML_TEXT を指定して、クライアントが HTML 形式のテキストを取得できるようにすることもできます。

JELLY_BEAN の時点で、送信されるデータは setClipData(ClipData) を介して提供できます。これにより、コンテンツを共有するときに FLAG_GRANT_READ_URI_PERMISSION を使用できます: URI および ClipData のその他の高度な機能。このアプローチを使用する場合でも、古いアプリケーションとの互換性のために、以下で説明する EXTRA_TEXT または EXTRA_STREAM フィールドを介して同じデータを提供する必要があります。ClipData を設定しない場合は、startActivity(Intent) を呼び出すときにそこにコピーされます。

一部の受信者によって適切に解釈される可能性があるオプションの標準エクストラは、EXTRA_EMAIL、EXTRA_CC、EXTRA_BCC、EXTRA_SUBJECT です。

この情報を考慮して、インテントのタイプで特定のデータの MIME タイプも設定する必要があります。

于 2013-02-22T13:18:38.613 に答える
2

以下のコードを試してください。私はこのコードを使用して、アプリケーションの1つからのテキストと画像を共有しました。

それがあなたにも役立つことを願っています。

  File pngDir = new   File(Environment.getExternalStorageDirectory(),"Android/data/Textures");
   if (!pngDir.exists()) {
pngDir.mkdirs();
}
File pngfile = new File(pngDir,"texture1.png");
Uri pngUri = Uri.fromFile(pngfile);
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("image/png");
shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
                "Text to Share");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT,
        "Context to share");
shareIntent.putExtra(android.content.Intent.EXTRA_STREAM,
                pngUri); //Share the image on Facebook
PackageManager pm = getApplicationContext().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);
        startActivity(shareIntent);
        break;
            }
        }

これでは、デバイスの特定の場所に保存されている画像を使用しました。画像の位置に応じて変更できます。

于 2013-03-06T04:37:05.680 に答える
0

詳しくはフェイスブックページをご覧ください

Facebook アプリで共有するテキストを渡すことができないようです。

Facebook シェア インテントの詳細

于 2013-06-05T12:29:56.410 に答える