Изображение было удалено после отправки через видеовстречу Google

Я написал простое приложение для просмотра изображений. Однако после отправки картинки с общим намерением:

        Intent shareIntent = new Intent();
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("URLSTRING"));
        shareIntent.setType("image/jpeg");
        mActivity.startActivity(Intent.createChooser(shareIntent, "SHARE"));

Изображение может быть успешно отправлено, если я выбрал Google Hangouts. Но после этого он удаляется!

Протестировано с другим приложением файлового менеджера (корневой проводник), и это то же самое поведение!

Тем не менее, изображение, отправленное с помощью приложения GooglePlusGallery, похоже, не имеет этой проблемы.

В чем хитрость? Как избежать удаления изображения?


person Robin    schedule 12.02.2014    source источник
comment
Код, который вы разместили, вероятно, не в том, где проблема.   -  person John M.    schedule 12.02.2014
comment
Я знаю, так как он отлично работает со всеми другими приложениями, такими как gmail/g+.   -  person Robin    schedule 12.02.2014
comment
Я хочу сказать, что мы не сможем вам помочь, если вы не предоставите нам неработающий код.   -  person John M.    schedule 12.02.2014
comment
Мой вопрос не о моем коде, а об уловке Hangout   -  person Robin    schedule 12.02.2014
comment
Вы не слушаете, что я говорю... ошибка, вероятно, связана с тем, что вы внесли ее где-то в кодовой базе. Мне трудно поверить, что Android просто удалит любую фотографию, которую вы отправили через намерение.   -  person John M.    schedule 12.02.2014
comment
Ты когда нибудь пробовал? Вы просто верите в то, во что хотите верить... Прекратите комментировать, если не имеете понятия...   -  person Robin    schedule 13.02.2014
comment
Я попросил вас показать больше кода, чтобы попытаться найти вашу ошибку, так как я не верю, что она кроется в этом маленьком фрагменте. Не нужно становиться враждебным. Если вы найдете решение, пожалуйста, опубликуйте его здесь для тех, кто может столкнуться с этой проблемой в будущем.   -  person John M.    schedule 13.02.2014


Ответы (3)


У меня была такая же проблема с Hangouts. Кажется, что он удаляет файл, даже если ему не удается его отправить, поэтому всегда копируйте файл в новый временный файл перед вызовом намерения.

person Peter Petrov    schedule 06.03.2014

У меня была та же проблема, я полагаю, что вместо этого выставил ContentProvider, который мог бы решить uri.

person Feio    schedule 12.03.2014

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

Поэтому вместо того, чтобы делиться файлом напрямую, я сначала делаю копию. Вот полное решение:

Bitmap bm = BitmapFactory.decodeFile(filePath); // original image
File myImageToShare = saveToSD(bm); // this will make and return a copy
if (myImageToShare != null) {
    Intent shareIntent = new Intent();
    shareIntent.setAction(Intent.ACTION_SEND);
    shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(myImageToShare));
    shareIntent.setType("image/jpeg");
    context.startActivity(Intent.createChooser(shareIntent, "Share using"));
}

private File saveToSD(Bitmap outputImage){
    File storagePath = new File(Environment.getExternalStorageDirectory() + yourTempSharePath);
    storagePath.mkdirs();

    File myImage = new File(storagePath, "shared.jpg");
    if(!myImage.exists()){
        try {
            myImage.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    } else {
        myImage.delete();
        try {
            myImage.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    try {
        FileOutputStream out = new FileOutputStream(myImage);
        outputImage.compress(Bitmap.CompressFormat.JPEG, 100, out);
        out.flush();
        out.close();
        return myImage;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}
person MVojtkovszky    schedule 27.04.2014