在Android上与Facebook分享图片和文字

Facebook,为什么你没有共享意图的图像和文字?

在这里输入图像说明

我试图使用标准的Android共享意图共享一个图像,和一些文字。 我的意图是build立正确的,我已经在那里形象了,我已经完成了交易的结束。 我的代码,让我告诉你:

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实际做一个分享它说:

请只附上照片或一个video。

为什么Facebook,为什么? 为什么你会出现一个可以处理我的意图的应用程序,然后让我看起来愚蠢的我的用户不处理意图? 你承诺Facebook。

我在这个网站和networking上看到了很多很多的线索。 有没有人得到这个工作,而不必使用他们的API?

为什么? 因为他们是Facebook,可以自己允许这样的错误。 所以,他们预计只有types的图像是“图像/ ”。 如果types是“text / plain”,那么消息中应该包含一个URL。 不要使用.setType(“ / *”); 否则使用他们的SDK。 但在这种情况下,您将牺牲您的应用程序的简单性和灵活性。

这是我的工作解决scheme如何通过意图在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。

我不知道是否真的有意与facebook分享,但在这里,检查这个链接的Twitter。 这个post和答案似乎是写得很好的,详细的post。

Android Intent for Twitter应用程序

只有一个解决scheme,您可以使用canvas创build文本和图像的位图,并在Facebook上分享。 ( 在这里下载源代码 )

这是我的代码:

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")); } } 
 File image = getShareFile(); // name of files 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()); // sharing text shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(image)); // sharing image shareActionProvider.setShareIntent(shareIntent);