2016-04-22 2 views
1

Я использую приведенный ниже код для обмена изображениями и текстом в Android. Когда я выбираю Whatsapp, он разделяет изображение и текст вместе, но когда я выбираю Facebook, он просто передает изображение без текста! Какая ошибка в моем коде? Благодарю.share Изображение и текст в Android

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

U необходимо ответить на предоставленные ответы или принять их! – Basanth

ответ

2

Что не так в моем коде?

Наверное, ничего. ACTION_SEND поддерживает либоEXTRA_TEXTилиEXTRA_STREAM в одном Intent, но не оба («... может иметь либо EXTRA_TEXT или поле EXTRA_STREAM, содержащий данные, которые будут направлены»). Некоторые версии ACTION_SEND выйдут за рамки документированного протокола и попытаются использовать их. Другие будут придерживаться документированного протокола и использовать его только. В этом случае Facebook, возможно, предпочтет придерживаться документированного протокола и использовать его только.

0

Facebook изменил свою политику, поэтому вы не можете делиться изображением и текстом. Уже невозможно, что так было

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?

0

Вы не можете передавать текст с Facebook больше! Период.

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

пакет 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")); 


    } 
} 

Спасибо!

Смежные вопросы