38

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

ここに画像の説明を入力

標準の 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をクリックして実際に共有すると、次のように表示されます。

写真またはビデオのみを添付してください。

なぜフェイスブック、なぜ?インテントを処理できるアプリとして表示されるのに、インテントを処理しないことでユーザーにばかげているように見えるのはなぜですか? あなたはフェイスブックと約束した。

このサイトやウェブ上で、これに関する多くのスレッドを見てきました。APIを使用せずにこれを機能させた人はいますか?

4

4 に答える 4

3

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

于 2013-02-22T10:07:30.820 に答える
0

キャンバスを使用してテキストと画像のビットマップを作成し、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"));


}
}
于 2016-12-12T12:17:45.033 に答える
-1
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);
于 2014-07-07T10:30:56.590 に答える