Извините, вы не можете добавить это изображение к своему сообщению при попытке отправить MMS

Я пытаюсь отправить MMS с изображением, которое я сохранил на SD-карте, и при открытии службы обмена сообщениями я получаю сообщение «Извините, вы не можете добавить это изображение в свое сообщение», и он не прикрепляет файл. Я попытался преобразовать файл в uri, попытался передать файл непосредственно в намерение MMS и сделал несколько других вещей. Я не уверен, что мне не хватает, и я почти уверен, что он сохраняет это, поскольку я вижу файл в средстве просмотра файлов. Должен ли я сделать изображение доступным для хранилища мультимедиа, отсканировав его (предпочитаю не помещать его в галерею изображений), нужно ли мне сначала открыть файл, прежде чем передавать его? Небольшое направление относительно того, что я должен делать, будет оценено.

Мой файл

private static final String FILENAME = "data.pic";
File dataFile = new File(Environment.getExternalStorageDirectory(), FILENAME);

Сохранение изображения

// Selected image id
int position = data.getExtras().getInt("id");
ImageAdapter imageAdapter = new ImageAdapter(this);
ChosenImageView.setImageResource(imageAdapter.mThumbIds[position]);
Resources res = getResources();
Drawable drawable = res.getDrawable(imageAdapter.mThumbIds[position]);
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bitmapdata = stream.toByteArray();
try {
    File file = new File(dataFile, FILENAME);
    file.mkdirs();
    FileOutputStream fos = new FileOutputStream(file);
    fos.write(bitmapdata);
    fos.close();
 }catch (FileNotFoundException e) {
 e.printStackTrace();
 } catch (IOException e) {
 e.printStackTrace();
 }

}

Где я хочу его прикрепить и моя текущая попытка

// Create a new MMS intent
Intent mmsIntent = new Intent(Intent.ACTION_SEND);
mmsIntent.putExtra("sms_body", "I sent a pic to you!");
mmsIntent.putExtra("address", txt1);
mmsIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(FILENAME)));
mmsIntent.setType("image/png");
startActivity(mmsIntent);
}};

person user1409172    schedule 24.11.2012    source источник
comment
Просто убедитесь, что расширение файла private static final String FILENAME = "data.pic";. Я предлагаю вам использовать private static final String FILENAME = "data.jpeg"; Так что это либо "data.jpeg", либо "data.png".   -  person user370305    schedule 24.11.2012
comment
посмотрите здесь: stackoverflow .com/questions/10527536/ разница в том, что startActivityForResult() используется вместо startActivity()   -  person blacharnia    schedule 24.11.2012
comment
Хм, изменил его на data.png (поскольку это изображение в формате png) и не повезло.   -  person user1409172    schedule 24.11.2012
comment
@blacharnia Это была ссылка, которую я использовал для своей текущей попытки. Я что-то упускаю и не могу понять это.   -  person user1409172    schedule 24.11.2012
comment
Посмотрите на мой ответ. Хоп ты это понимаешь.   -  person user370305    schedule 24.11.2012


Ответы (1)


Аааа, извините, вы не можете.

Проблема:

new File(FILENAME) не существует.

Посмотрите на эти три разные строки кода Files.

1. File dataFile = new File(Environment.getExternalStorageDirectory(), FILENAME);

2. File file = new File(dataFile, FILENAME);

3. Uri.fromFile(new File(FILENAME))

Все они имеют разностную ссылку.

Решение:

Измените свой код

try {
     File file = new File(dataFile, FILENAME); 
     file.mkdirs(); // You are making a directory here
     FileOutputStream fos = new FileOutputStream(file); // set Outputstream for directory which is wrong
     fos.write(bitmapdata);
     fos.close();
    }catch (FileNotFoundException e) {
     e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }

С участием

try {
      FileOutputStream fos = new FileOutputStream(dataFile);
      fos.write(bitmapdata);
      fos.close();
     }catch (FileNotFoundException e) {
      e.printStackTrace();
     } catch (IOException e) {
      e.printStackTrace();
    }

И основные строки кода для отправки MMS,

if(dataFile.exists())
{
 Intent mmsIntent = new Intent(Intent.ACTION_SEND);
     mmsIntent.putExtra("sms_body", "I sent a pic to you!");
     mmsIntent.putExtra("address", txt1);
     mmsIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(dataFile));
     mmsIntent.setType("image/png");
     startActivity(mmsIntent);
}

Просто используйте только одну ссылку dataFile File для всего вашего кода.

person user370305    schedule 24.11.2012
comment
Также перед отправкой изображения проверьте, существует ли оно на внешнем хранилище или нет. - person user370305; 24.11.2012
comment
Очень ценю это, я новичок и сделал ошибку новичка, лол, и теперь вижу проблему. С вашей помощью удалось правильно прикрепить файл, но теперь, похоже, возникла проблема с отображением изображения в MMS. Он показывает общее изображение с треугольником с ! в нем, кажется, сейчас он не конвертирует его должным образом. (также хотел, чтобы основные функции работали, прежде чем добавлять проверку, если внешний доступен, будет добавлен). - person user1409172; 24.11.2012
comment
@user1409172 user1409172 Вы можете отправлять аудио или видео через ммс? у меня возникают проблемы с отправкой аудиофайла через mms только для нескольких устройств, таких как htc, lava или некоторые samsung. - person Harshid; 29.01.2013