it-swarm.com.de

Teilen von Bildern und Text mit Facebook auf Android

Facebook, warum nimmst du keine Bilder und Texte in Intent Intent?

enter image description here

Ich versuche, die Standard-Android-Freigabe zu verwenden, um ein Bild und etwas Text zu teilen. Meine Anteilsabsicht ist richtig eingerichtet, ich habe das Image da drin und habe mein Geschäft beendet. Mein Code, lass mich es dir zeigen:

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 wird in der Liste der Apps angezeigt, die mit meinem Intent umgehen, aber es lügt !!! Wenn Sie auf Facebook klicken, um eine Freigabe auszuführen, heißt es:

Bitte hängen Sie nur Fotos oder ein einzelnes Video an.

Warum Facebook? Warum? Warum werden Sie als App angezeigt, die mit meinem Intent umgehen kann, und mich dann für meine Benutzer dumm erscheinen lässt, indem Sie den Intent nicht handhaben? Sie haben Facebook versprochen.

Ich habe auf dieser Site und im Web viele Threads gesehen. Hat jemand diese Funktion erhalten, ohne ihre API zu verwenden?

34

Dies ist meine Arbeitslösung, wie ich Bilder auf Facebook über Absicht freigeben kann. Leider akzeptiert Facebook nicht EXTRA_TEXT und kann daher nur das Bild freigeben. Es funktioniert auch mit anderen Anwendungen und kann bei den meisten auch Textbeschriftungen hinzufügen.

    /**
     * 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"));
    }

Wenn Sie ein Bild zusammen mit der Bildunterschrift freigeben möchten, müssen Sie das Facebook SDK verwenden.

2
Sandak

Warum? Weil sie Facebook sind und sich solche Fehler erlauben können. Sie erwarten also, dass nur Bilder nach Typ "Bild /" sind. Wenn der Typ "text/plain" ist, sollte eine URL in der Nachricht enthalten sein. Verwenden Sie nicht .setType ("/ *"); Andernfalls verwenden Sie ihr SDK. In diesem Fall opfern Sie jedoch die Einfachheit und Flexibilität Ihrer Anwendung.

2
Simon

Ich weiß nicht, ob es eigentlich eine Absicht gibt, mit Facebook zu teilen, aber hier, überprüfen Sie diesen Link für Twitter. Der Beitrag zusammen mit den Antworten scheint für einen gut geschriebenen und detaillierten Beitrag zu sorgen. 

Android Intent für Twitter-Anwendung

1
tash

Lösung für die folgenden hervorgehobenen Probleme.

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

Ich hatte Glück, nachdem ich drei Tage lang ständig gesucht hatte. Die Antwort kann langwierig sein, da ich auf StackOverflow keine Lösung gefunden habe, die ein Bild auf Facebook freigeben könnte, ohne das Facebook SDK zu verwenden.

Hier ist die vollständige und perfekte Lösung:

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

Der erste Parameter ist das imageView/Layout für die Bilder, die in die Bitmap geladen werden. Der zweite Parameter ist der Paketname von Facebook. 

Dann codieren Sie die folgende Methode wie gezeigt.

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

Hier sind meine App-Screenshots: 

1 . "Quote book app" lädt ein Bild mit einem Zitat darauf. 

2 . Klicken Sie auf die Share-Schaltfläche und klicken Sie im Dialog auf Facebook. 

3 . Das Dialogfeld mit den Facebook-Freigabeoptionen wird angezeigt.

4 . Bild auf die Facebook-Titelseite geladen. 

5 . Schließlich wird das Bild auf Facebook geteilt. Die Methode funktioniert wie erwartet.

PS: Sie können diese Funktion in meiner App überprüfen. Hier ist der Link , um sie vom Google Play Store herunterzuladen. 

0
yahme3

Es gibt nur eine Lösung, mit der Sie die Bitmap aus Text und Bild mithilfe der Leinwand erstellen und auf Facebook freigeben können. ( Quellcode hier herunterladen )

Hier ist mein Code:

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