2015-04-16 3 views
1

Я думал, что это популярная проблема, но я не могу найти ничего, что связано с ней. Так вот что я хочу: Я пытаюсь отправить изображение по WhatsApp со следующим кодом:Отправить изображение через Intent от WhatsApp - Неверное изображение

public static void shareImage(Context context,Bitmap bitmap, String text){ 
    Intent share = new Intent(Intent.ACTION_SEND); 
    share.setType("image/*"); 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
    File f = new File(Environment.getExternalStorageDirectory() + File.separator + "temporary_file.jpg"); 
    try { 
     f.createNewFile(); 
     FileOutputStream fo = new FileOutputStream(f); 
     fo.write(bytes.toByteArray()); 
     fo.close(); 
    } catch (IOException e) {      
      e.printStackTrace(); 
    } 
    share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f)); 
    share.setPackage("com.whatsapp"); 
    context.startActivity(Intent.createChooser(share, "Share!")); 
} 

Он отлично работает, в первый раз я использую приложение .. правое изображение появится в WhatsApp , Если я выберу другой битмап с моим приложением, Whatsapp все еще показывает первое изображение.

То, что я сделал, и то, что я думал, что вызвало проблемы:

  • Если существовал временный файл, я удалил его f.delete()
  • Затем я обновил галерею с MediaScanner, потому что я думал, что URI Я положил в Extra не в курсе ...

Fyi: Временный файл содержит правильное изображение. Если я выберу его с помощью FileExplorer, он отобразит правильное изображение. Если я попытаюсь отправить изображение. все еще старый Image

Есть ли у кого-нибудь идеи, в чем проблема? Неужели Ури ошибается? Если я напечатаю Uri.fromFile(f), то он говорит file:///storage/sdcard0/temporary_file.jpg

Спасибо!

Nico

ответ

2

Действительно ли вы отправили первое изображение или вы его отменили? У меня такая же проблема, и я просто понял, что правильное изображение будет отправлено, если вы продолжите. Я думаю, проблема вызвана старыми изображениями миниатюр. Вы можете использовать разные имена файлов.

File f = new File(Environment.getExternalStorageDirectory() + File.separator + "temporary_file"+ System.currentTimeMillis() +".jpg"); 

Позже вы можете удалить все файлы, начинающиеся с "temporary_file"

for (File file : Environment.getExternalStorageDirectory().listFiles()) { 
      if (file.isFile() && file.getName().startsWith("temporary_file")) file.delete(); 
     } 
+0

О Спасибо! Я попробую это и даю любую обратную связь. Но это звучит вполне правдоподобно, потому что я его не отправил, как вы ожидали – Wicked161089

+0

Я действительно работал! Я просто создаю новые временные файлы и использую их вместо того, чтобы переписывать один ... в Activitys onDestroy Я удаляю все tmp-файлы. Благодаря @Andree – Wicked161089

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