2012-04-02 2 views
9

Я зря трачу много времени, пытаясь получить совместное использование простого jpeg-изображения, работающего через совместное использование Intent.share picture через Intent (Facebook и co)

Самый важный, как обычно, - это Facebook, и, как обычно, он не работает.

Intent shareIntent = new Intent(Intent.ACTION_SEND); 
Uri picUri = Uri.parse("http://someserver.com/somepic.jpg"); 
shareIntent.setType("image/jpeg"); 
shareIntent.putExtra(Intent.EXTRA_STREAM, picUri); 
shareIntent.putExtra(Intent.EXTRA_TEXT, someString); 
startActivity(Intent.createChooser(shareIntent, "some text...")); 

Выбрав хороший выбор, Facebook также открывает и заставляет меня войти в систему, но потом он говорит мне, что обновление не удалось. Я также пробовал Flicker и Mail, и все они терпят неудачу. Тогда я попытался записать образ на локальный файл и отправить оттуда, также не удалось:

Drawable dr = ImageLoader.getDrawable(url); 
    Bitmap bmp = ((BitmapDrawable)dr).getBitmap(); 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    bmp.compress(Bitmap.CompressFormat.JPEG, 80, stream); 
    byte[] data = stream.toByteArray(); 

    FileOutputStream ostream; 
    try { 
     ostream = this.openFileOutput("pic.jpeg", Context.MODE_WORLD_READABLE); 
     ostream.write(data); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    Uri picUri = Uri.fromFile(new File("pic.jpeg")); 
    shareIntent.putExtra(Intent.EXTRA_STREAM, picUri); 

Я не имею ни малейшего понятия, если я могу это сделать правильно, не сделали этого раньше.

Моя последняя попытка состояла в том, чтобы просто отправить строку HTML с изображением, включенным в качестве тега img. Но Facebook, похоже, не обрабатывает тип «text/html», поэтому это не вариант. Я уверен, что ему нужно всего несколько строк кода. Но какие?

редактировать

Я забыл линию

shareIntent.putExtra(Intent.EXTRA_STREAM, picUri); 

в первом фрагменте кода. Он был там, когда я пытался, тоже не работал. Не спать слишком долго ...

+5

Вы когда-нибудь находили разумный способ поделиться фотографией с URL? – cimnine

+0

Hi didi_X8, Вы нашли решение этой проблемы? Как я застрял в этом тоже – Elshaer

ответ

0

Я думаю, что это ответит на ваш вопрос. https://stackoverflow.com/a/3553102/478537

Похоже, что вы находитесь на правильном пути, все, что я вижу, это то, что в первом фрагменте кода вы не используете picUri нигде и, следовательно, его не отправляете, а во втором вы устанавливаете EXTRA_STREAM дважды (что не вызовет каких-либо проблем, просто избыточный код).

+0

sry, слишком давно ... Спасибо, что мне не нужно работать с файлом FB, поэтому я не буду проверять, работает ли это. Может быть, когда-нибудь мне это понадобится еще раз. Спасибо в любом случае –

0

..Intent.EXTRA_TEXT, someString.

Это не удастся выполнить транзакцию с помощью Facebook - а не «someString». Обмен Facebook ожидает и ищет URL, переданный через EXTRA_TEXT. Почему - не спрашивайте .. Я не понял ребята

0

Ну, я потратил много времени, и проблема была в расширении файла (png сделал проблему, поэтому игнорируйте расширение файла в этом случае и используйте «JPG»), попробуйте следующий код

public static void shareImageFileWithIntent(File imageFile, Context context) { 
    MimeTypeMap mime = MimeTypeMap.getSingleton(); 
    String type = mime.getMimeTypeFromExtension("jpg"); 
    Intent sharingIntent = new Intent(Intent.ACTION_SEND); 
    sharingIntent.setType(type); 
    sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(imageFile)); 
    sharingIntent.putExtra(Intent.EXTRA_TEXT, "your extra text"); 
    sharingIntent.putExtra(Intent.EXTRA_SUBJECT, "your subject"); 
    context.startActivity(Intent.createChooser(sharingIntent, context.getString(R.string.share_image_intent))); 
} 
0

Вместо передачи изображения с помощью намерения, вы можете создать новый класс и сохранить его там от одного вида деятельности. И получить доступ к этому изображению из другого действия.

+0

Это больше похоже на комментарий, чем на ответ. –

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