分享Android中的图片和文字

时间:2016-04-22 10:56:40

标签: android image text share-intent

我正在使用以下代码在Android中分享图片和文字。当我选择Whatsapp时,它会共享图像和文本,但是当我选择Facebook时,它只是在没有任何文本的情况下共享图像!我的代码中有什么错误?感谢。

Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/jpeg");
share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(bitmapPath)));
share.putExtra(Intent.EXTRA_TEXT, "Shared via" +  APP_URL);
startActivity(Intent.createChooser(share, "Share Image"));

5 个答案:

答案 0 :(得分:2)

  

我的代码出了什么问题?

可能没什么。 ACTION_SEND在一个EXTRA_TEXT中支持 <{em> EXTRA_STREAM Intent,而不是两者都支持(“......可以拥有一个EXTRA_TEXT或EXTRA_STREAM字段,包含要发送的数据“)。一些ACTION_SEND实现将超出所记录的协议并尝试使用它们。其他人将坚持使用文档化的协议,只使用一个。在这种情况下,Facebook可能选择坚持使用文档化的协议,只使用一个。

答案 1 :(得分:2)

<强> Facebook will not allow you to Share any static text you want.

That's why Facebook have provide it's own Share Dialog to post any text on facebook.

It will take image as static but not text.

So better for facebook share only you use Facebook Share Dialog.

The thing is, if you put a URL in the EXTRA_TEXT field, it does work. It's like they're intentionally stripping out any text.

<强> **Check below links for Integration of Facebook Share.**

https://developers.facebook.com/docs/sharing/reference/share-dialog

Android: How to share image with text on facebook via intent?

答案 2 :(得分:0)

Facebook改变了他们的政策,因此您无法共享图像和文本。它再也不可能了

答案 3 :(得分:0)

  

您无法再与Facebook分享文字了!的期间

答案 4 :(得分:0)

无法使用意图在Facebook上共享图像和文本。但是如果你想要共享它们,那么你必须创建图像和文本的位图。

从此处下载源代码(Share image and text on facebook using intent in android

<强> activity_main.xml中:

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


    }
}

谢谢!