Facebook, почему вы не берете изображения и текст в долевом намерениях?
Я'м пытаюсь использовать стандартный Android поделиться намерением поделиться изображения и текст. Моя доля умысла настроен правильно, я've получили изображения в там, и я'ве сделали свою часть сделки. Мой код, позвольте мне показать вам это:
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 фактическому сделать поделиться им говорит:
и GT; пожалуйста, приложите только фотографии или одного видео.
Почему Facebook, почему? Почему ты появляешься как приложение, которое может обрабатывать мое намерение, то я выгляжу глупым, чтобы мои пользователи не обрабатывайте намерениях? Ты обещал Facebook.
Я've видел много многие темы на этом на всем этом сайте, и в интернете. Кто-нибудь получил эту работу без того, чтобы использовать их API?
Почему? Потому что они являются Facebook и может позволить себе такие ошибки. Так, они ожидают только изображений по типу "и изображения/то". Если тип является "текст/равнина", тогда URL-адреса должны содержаться в сообщении. Дон'т использовать .setType (на"/*" - а); В противном случае использовать их СДК. Но в этом случае вы'МР жертву простоте и гибкости применения.
Это мой рабочий раствор, как поделиться изображение на 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"));
}
Если вы хотите поделиться изображение вместе с подписью, Вы'll должны использовать SDK Facebook.
Я не'т знать, если theres фактически намерение поделиться с facebook, но здесь, проверьте эту ссылку для Twitter. Этот пост вместе с ответами, похоже на хорошо написанный и подробный пост.
https://stackoverflow.com/questions/2077008/android-intent-for-twitter-application/9151983#9151983
Есть только одно решение, вы можете создать растровое изображение текста и изображения, используя холст и поделиться им на 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"));
}
}
Решение перечисленных проблем.
и GT; пожалуйста, приложите только фотографии или одного видео.`
Facebook-это'т в опционной Диалог
даже если на стене Facebook появится, тогда он выиграл'т пусть вы открываете ваше изображение на главной странице.`
поделиться изображение на Facebook без использования Facebook СДК
Мне повезло после поиска в течение трех дней постоянно. К сожалению, ответ может быть очень длинным, потому что я не нашел решение на StackOverflow, которые могут поделиться изображения на Facebook без использования SDK Facebook.
Вот полный и идеальное решение:
Bitmap bitmap = viewToBitmap(load your image OR layout background for your imageView);
shareImage(bitmap, "com.facebook.katana");
Первый параметр-просмотрщик фото/макет для изображений, загруженных в рисунок. Второй параметр-это facebook's имя пакета.
Затем код следующим способом, как показано на рисунке.
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();
}
}
Здесь'снова мое приложение скриншоты:
1. на "цитировать книги приложение" Не загружается фото с цитатой на это.
2. Нажмите кнопку "Поделиться" и нажмите на кнопку Facebook в диалоговом окне.
3. Диалог обмен варианты Facebook появляется.
4. Изображения загружаются на главную страницу Facebook.
5. Наконец изображение поделиться на Facebook и метод работает должным образом, как мы ожидали.
PS: вы можете проверить эту функциональность в моем приложении, здесь'ы ссылку, чтобы загрузить его из Google играть магазин.
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);