Попытка отправить созданный текстовый файл в виде вложения электронной почты - из папки по умолчанию - PullRequest
4 голосов
/ 05 декабря 2011

Я пытаюсь сделать что-то простое, например, создать текстовый файл и отправить его в виде вложения. Хотя он работает нормально, если я использую SDCard, я не знаю, куда поместить его в «стандартную папку данных», поэтому мое приложение работает практически для всех без SDCard (и файл несколько невидим)

Пока работает этот код, я поставил вопросы в комментарии <- <strong>*.

При создании файла:

String FILENAME = "myFile.txt";
    String string = "just something";

    // create a File object for the parent directory
    File myDirectory = new File("/sdcard/myDir/");  // ******** <- what do I have to put HERE for standard data folder????
    // have the object build the directory structure, if needed.
    myDirectory.mkdirs();
    // create a File object for the output file
    File outputFile = new File(myDirectory, FILENAME);
    // now attach the OutputStream to the file object, instead of a String representation
    FileOutputStream fos = null;
   //always have to put try/catch around the code - why? I don't know
    try {
        fos = new FileOutputStream(outputFile);
    } catch (FileNotFoundException e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
    }

     //again have to put try/catch around it - otherwise compiler complains
    try {
        fos.write(string.getBytes());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    }

При отправке файла:

public void doSendFile() {
    String fileName = "/sdcard/myDir/myFile.txt"; // ******** <- what do I have to put HERE for standard data folder????
    Intent i = new Intent(Intent.ACTION_SEND);
    try {
        mainDataManager.logFileHandle.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    i.setType("text/plain");
    i.putExtra(Intent.EXTRA_EMAIL, new String[] { "to@someone.com" });
    i.putExtra(Intent.EXTRA_SUBJECT, "subject");
    i.putExtra(Intent.EXTRA_TEXT, "text");
    Log.i(getClass().getSimpleName(),
        "logFile=" + Uri.parse("file://" + fileName));
    i.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + fileName));

    try {
        startActivity(Intent.createChooser(i, "Send mail..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(getBaseContext(),
            "There are no email clients installed.", Toast.LENGTH_SHORT)
            .show();
    }

    }

Я обнаружил, что файл создается по адресу «data / data / com.xxx.xxxx / database / myFile.txt» при создании. Но когда я использовал это в приложении, ничего не было отправлено.

Так что в основном все, что мне нужно, это знать, как сохранить файл в локальной памяти, а затем отправить его оттуда. Поскольку не у всех может быть SD-карта с внешней памятью - я полагаю.

Спасибо!

1 Ответ

0 голосов
/ 01 мая 2012

Это потому, что SD-карта не защищена, поэтому вы можете писать туда стандартным способом Java, как вы это сделали.

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

Вы должны использовать openFileOutput (), см. Этот урок для получения дополнительной информации:

http://www.anddev.org/working_with_files-t115.html

...