web-dev-qa-db-ja.com

AndroidでFacebookと画像やテキストを共有する

Facebook、共有の意図で画像やテキストを撮らないのはなぜですか?

enter image description here

標準のAndroid共有インテントを使用して画像とテキストを共有しようとしています。共有インテントが正しく設定されていて、そこに画像があり、私の取引終了私のコード、それをお見せしましょう:

public void doShare() {
    File image = getShareFile();
    Intent shareIntent = new Intent();
    shareIntent.setAction(Intent.ACTION_SEND);
    shareIntent.setType("*/*");
    shareIntent.putExtra(Intent.EXTRA_SUBJECT, resultObject.getShareSubject());
    shareIntent.putExtra(Intent.EXTRA_TEXT, resultObject.getShareText());
    shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(image));
    shareActionProvider.setShareIntent(shareIntent);
}

私の意図を処理するアプリのリストにFacebookが表示されますが、嘘です!!! Facebookをクリックして実際に共有すると、次のようになります。

写真またはビデオを1つだけ添付してください。

なぜFacebookなのか?インテントを処理できるアプリとして表示されるのに、インテントを処理しないことでユーザーに愚かに見えるのはなぜですか? Facebookを約束した。

私はこのサイトやWebの至る所でこれについて多くのスレッドを見てきました。誰かがAPIを使用せずにこれを機能させることができましたか?

37

どうして?彼らはFacebookであり、そのようなバグを自分自身に許すことができるからです。そのため、タイプが「image/」の場合は画像のみが必要です。タイプが「text/plain」の場合、メッセージにURLを含める必要があります。setType( " /は使用しないでください。 * ");それ以外の場合は、SDKを使用します。ただし、この場合は、アプリケーションのシンプルさと柔軟性が犠牲になります。

3
Simon

これは意図的にFacebookで画像を共有するための私の実用的なソリューションです。残念ながらFacebookはEXTRA_TEXTなので、画像のみを共有できます。他のアプリケーションでも動作し、ほとんどのアプリケーションでテキストキャプションも追加できます。

    /**
     * Show share dialog
     * @param file image to share
     * @param text text to add for sharing
     */
    private void shareImageAndTextResultIntent(File file, String text) {
        // share intent
        Intent shareIntent = new Intent();
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.putExtra(Intent.EXTRA_TEXT, text);
        shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
        shareIntent.setType("image/*");
        shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        startActivity(Intent.createChooser(shareIntent, "send"));
    }

キャプションと一緒に画像を共有したい場合は、Facebook SDKを使用する必要があります。

2
Sandak

Facebookと共有したいのかどうかはわかりませんが、こちらのツイッターはこちらから。投稿と回答は、よく書かれた詳細な投稿になっているようです。

TwitterアプリケーションのAndroidインテント

1
tash

以下の強調表示された問題の解決策。

Please attach only photos or a single video.

Facebook isn't in the Share option Dialog

even if Facebook wall appears, then it won't let you open your image on the front page.

Share an image on Facebook without using Facebook SDK

3日間ずっと探していてラッキーでした。申し訳ありませんが、Facebook SDKを使用せずにFacebookで画像を共有できるStackOverflowのソリューションが見つからなかったため、答えは長くなる可能性があります。

ここに完全で完璧なソリューションがあります:

Bitmap bitmap = viewToBitmap(load your image OR layout background for your imageView);
shareImage(bitmap, "com.facebook.katana");

最初のパラメーターは、ビットマップにロードされるイメージのimageView/layoutです。 2番目のパラメーターは、facebookのパッケージ名です。

次に、次のメソッドを図のようにコーディングします。

public void shareImage(Bitmap bitmap, String packageName) {
        try {
            File file = new File(this.getExternalCacheDir(), "temp.png");
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.PNG, 95, fileOutputStream);
            fileOutputStream.flush();
            fileOutputStream.close();
            file.setReadable(true, false);
            final Intent intent = new Intent(Android.content.Intent.ACTION_SEND);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
            intent.setType("image/*");
            intent.setPackage(packageName);
            startActivity(Intent.createChooser(intent, "Share image on facebook"));
        } catch (Exception e) {
            Log.e(TAG, e.toString());
            Toast.makeText(this, "Error while sharing Image on Facebook", Toast.LENGTH_SHORT).show();
        }
    }

これが私のアプリのスクリーンショットです。

1 。 「見積もり書アプリ」は、見積もりを載せた画像を読み込んでいます。

2 。共有ボタンをクリックし、ダイアログからFacebookをクリックします。

。 Facebook共有オプションダイアログが表示されます。

4 。 Facebookのフロントページに読み込まれた画像。

5 。最後に画像がFacebookで共有され、メソッドは期待どおりに正しく機能しています。

PS:私のアプリでこの機能をチェックできます こちらがリンクです google Playストアからダウンロードしてください。

0
meyasir

Canvasを使用してテキストと画像のビットマップを作成し、それをFacebookで共有できるソリューションは1つだけです。 ( ここからソースコードをダウンロード

これが私のコードです:

activity_main

 <RelativeLayout Android:layout_width="match_parent"
 Android:layout_height="match_parent"
 Android:background="#ffffff"
xmlns:Android="http://schemas.Android.com/apk/res/Android">

<EditText
    Android:id="@+id/et_text"
    Android:layout_width="match_parent"
    Android:textSize="15dp"
    Android:layout_height="45dp"
    Android:layout_marginTop="10dp"
    Android:background="@drawable/edittext_drawable"
    Android:hint="Enter your text"
    Android:layout_marginLeft="10dp"
    Android:layout_marginRight="10dp"
    Android:paddingRight="10dp"
    Android:inputType="text"
    Android:imeOptions="actionDone"
    Android:paddingLeft="10dp"
    Android:singleLine="true"
    Android:textColorHint="#979797" />


<RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:id="@+id/rl_main"
    Android:background="#ffffff"
    Android:layout_below="@+id/et_text"
    Android:layout_above="@+id/tv_share">


    <ImageView
        Android:layout_width="match_parent"
        Android:layout_height="250dp"
        Android:src="@drawable/index"
        Android:scaleType="fitXY"
        Android:id="@+id/iv_image"
        Android:layout_marginTop="10dp"
        />

    <TextView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:textSize="15dp"
        Android:id="@+id/tv_text"
        Android:layout_below="@+id/iv_image"
        Android:layout_margin="10dp"
        Android:textColor="#000000"
        Android:maxLines="5"
        />

</RelativeLayout>



<TextView
    Android:id="@+id/tv_share"
    Android:layout_width="match_parent"
    Android:layout_height="50dp"
    Android:background="#F38D0A"
    Android:gravity="center"
    Android:padding="10dp"
    Android:layout_margin="10dp"
    Android:text="Share"
    Android:textColor="#ffffff"
    Android:textSize="15dp"
    Android:layout_alignParentBottom="true"/>

</RelativeLayout>

MainActivity.Java

package com.shareimage;

import Android.content.Intent;
import Android.graphics.Bitmap;
import Android.graphics.BitmapFactory;
import Android.graphics.Canvas;
import Android.net.Uri;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.text.Editable;
import Android.text.TextWatcher;
import Android.util.Log;
import Android.view.View;
import Android.widget.EditText;
import Android.widget.ImageView;
import Android.widget.RelativeLayout;
import Android.widget.TextView;
import Java.io.File;
import Java.io.FileNotFoundException;
import Java.io.FileOutputStream;
import Java.io.IOException;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
EditText et_text;
ImageView iv_image;
TextView tv_share,tv_text;
RelativeLayout rl_main;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    init();

}

private void init(){
    et_text = (EditText)findViewById(R.id.et_text);
    iv_image = (ImageView)findViewById(R.id.iv_image);
    tv_share = (TextView)findViewById(R.id.tv_share);
    rl_main = (RelativeLayout)findViewById(R.id.rl_main);
    tv_text= (TextView) findViewById(R.id.tv_text);

    File dir = new File("/sdcard/Testing/");
    try {
        if (dir.mkdir()) {
            System.out.println("Directory created");
        } else {
            System.out.println("Directory is not created");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    tv_share.setOnClickListener(this);

    et_text.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            tv_text.setText(et_text.getText().toString());

        }
    });


}




@Override
public void onClick(View v) {

    switch (v.getId()){
        case R.id.tv_share:
            Bitmap bitmap1 = loadBitmapFromView(rl_main, rl_main.getWidth(), rl_main.getHeight());
            saveBitmap(bitmap1);
            String str_screenshot = "/sdcard/Testing/"+"testing" + ".jpg";

            fn_share(str_screenshot);
            break;
    }

}

public void saveBitmap(Bitmap bitmap) {
    File imagePath = new File("/sdcard/Testing/"+"testing" + ".jpg");
    FileOutputStream fos;
    try {
        fos = new FileOutputStream(imagePath);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
        fos.flush();
        fos.close();

        Log.e("ImageSave", "Saveimage");
    } catch (FileNotFoundException e) {
        Log.e("GREC", e.getMessage(), e);
    } catch (IOException e) {
        Log.e("GREC", e.getMessage(), e);
    }
}

public static Bitmap loadBitmapFromView(View v, int width, int height) {
    Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(b);
    v.draw(c);

    return b;
}

public void fn_share(String path) {

    File file = new File("/mnt/" + path);

    Bitmap bmp = BitmapFactory.decodeFile(file.getAbsolutePath());
    Uri uri = Uri.fromFile(file);
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("image/*");
    intent.putExtra(Intent.EXTRA_STREAM, uri);

    startActivity(Intent.createChooser(intent, "Share Image"));


}
}
0
Deepshikha Puri