2013-07-19 5 views
5

Я создаю файл на внутренней памяти, как указано в документах android. Чтобы быть точным, файл создается в определенном каталоге во внутреннем хранилище. Я делаю это, используя режим mode_verable mode. Затем позже я попытаюсь прикрепить файл с помощью программы электронной почты. Мне удалось подключить файл, однако отправка электронной почты не удалась (кажется, не загружать файл), я уверен, что это внутреннее хранилище/разрешение.Отправить электронное письмо с приложением из внутреннего хранилища

Кто-нибудь знает, как исправить это или рабочий пример? Он будет сосать, чтобы преобразовать все на внешнем хранилище.

Спасибо

Ps: Я проверил другие темы, и они, кажется, не имеют решения (старые темы)

+0

http: // stackoverflow.com/questions/587917/try-to-attach-a-file-from-sd-card-to-email – KOTIOS

+0

Можно ли просмотреть файл по электронной почте? – user1140237

+0

@ Stacks28. Проблема в том, что я занимаюсь актуализацией из внутреннего хранилища. SD не поможет мне – Snake

ответ

4

Я предполагаю, что вы пытаетесь отправить файл в виде вложения электронной почты с использованием намерений.

Причина, почему файл пуст является то, что электронная почта приложение не имеет доступ к файлу в/данные/данные/PACKAGE_NAME/myfile_name, из-за андроиды модели безопасности (/ данные/данные/каталог package_name является , личный для вашего приложения).

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

+0

Так что я не могу это сделать из внутреннего хранилища, даже если бы я установил режим для чтения в мире – Snake

+0

nope buddy .... – KOTIOS

+0

@Snake Вы также можете использовать внутреннее хранилище, используя Provider. Прочтите данный ответ здесь http://stackoverflow.com/questions/13482310/how-to-share-internal-storage-file-with-gmail-client –

0

Я получил решение по этому вопросу после 4-х дней, пожалуйста, обратите внимание следующие моменты в то время давая путь к классу файлов в Android (Java):

1) Используйте путь для внутреннего пути хранения String = "/ хранение/sdcard0/myfile.txt "; 2) путь = "/ storage/sdcard1/myfile.txt"; 3) укажите разрешения в файле манифеста.

4) Сначала проверьте длину файла для подтверждения. 5) Проверить пути в ES File Explorer относительно sdcard0 & sdcard1 это то же самое или еще ...

например. in android phone storage также является внешним хранилищем

Файл файла = новый Файл (путь); long = file.length(); // в байтах

6

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

Шаг 1: Добавление поставщика файла на ваш AndroidManifest.xml:

<applicaton> 
    .... 
    <provider 
     android:name="android.support.v4.content.FileProvider" 
     android:authorities="com.your.package.name.fileprovider" 
     android:grantUriPermissions="true" 
     android:exported="false"> 
     <meta-data 
      android:name="android.support.FILE_PROVIDER_PATHS" 
      android:resource="@xml/filepaths" /> 
    </provider> 
</application> 

Шаг 2: Добавить файл Рез/XML/filepaths.xml с путем к файлу в локальном хранилище приложений, которые вы хотите поделиться:

<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
    <files-path name="myFolder" path="Folder/"/> 
</paths> 

Шаг 3: в своем коде Java создать общий доступ к файлам намерения:

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE); 
    shareIntent.setType("text/plain"); 
    shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Your subject"); 
    shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Your message"); 

    ArrayList<Uri> uris = new ArrayList<Uri>(); 
    String shareName = new String(pathToFile + filename); 
    File shareFile = new File(shareName); 
    Uri contentUri = FileProvider.getUriForFile(context, "com.your.package.name.fileprovider", shareFile); 
    uris.add(contentUri); 
    shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); 

    // Grant temporary read permission to the content URI 
    shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

    String msgStr = "Share..."; 
    startActivity(Intent.createChooser(shareIntent, msgStr)); 

Если Y ou есть какие-либо проблемы с этим, см. документы здесь https://developer.android.com/training/secure-file-sharing/share-file.html для получения дополнительной информации.

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