Android: как отправить намерение по электронной почте, используя файл со специальными символами?

1

Я могу прикрепить текстовый файл к электронному письму с помощью этого кода:

String fileName = "test.txt";
path = "file://" + Environment.getExternalStorageDirectory() + "/" + fileName;

Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(path));
startActivity(Intent.createChooser(sendIntent, "Email"));

Однако письма, отправленные через gmail, не содержат вложения, если fileName="test#.txt".

Я пробовал кодирование пути с помощью URLEncoder, как показано ниже, но это не работает ни с "text.txt", ни с "text #.txt".

Я, вероятно, пропустил здесь что-то простое, но как мне закодировать пути к файлам со специальными символами для отправки намерений?

String fileName = "test.txt";
// String fileName = "test#.txt";

String path = "file://" + Environment.getExternalStorageDirectory() + "/" + fileName;
String encPath = URLEncoder.encode(path);

Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(encPath));
startActivity(Intent.createChooser(sendIntent, "Email"));
Теги:

1 ответ

1
Лучший ответ

Это потому, что вы неправильно кодировали URL-адрес. Вместо того, чтобы кодировать только имя файла, вы закодировали полный URL-адрес, что приводит к:

file://te#st.txt
file%3A%2F%2Fte%23st.txt

Попробуйте это вместо этого:

String path = "file://" + Environment.getExternalStorageDirectory() + "/";
path += URLEncoder.encode( fileName );
  • 0
    отлично, спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню