Как связать данные, полученные из настраиваемого диалога (edittext, datepicker, spinner и т. Д.) В .csv и прикрепить к электронной почте в Android? - PullRequest
2 голосов
/ 10 марта 2012

В моем приложении у меня есть диалог настройки, откуда я получаю пользовательский ввод в виде textedit, sppiner, datepicker. У меня также есть кнопка «отправить» там в диалоге. Я хочу, чтобы после заполнения полей в диалоговом окне, как только пользователь нажимает кнопку «Отправить», данные, которые он / она мог заполнить, должны быть упакованы как .csv, прикреплены к электронному письму и отправлены по электронной почте напрямую, не открывая экран электронной почты по умолчанию.

Любая помощь будет высоко оценена.

Мрана

1 Ответ

3 голосов
/ 10 марта 2012

Получите данные из вашего EditText, Spinner и DatePicker и сохраните их в строке, используя требуемый разделитель для вашего CSV (например, запятая, точка с запятой, табуляция, пробел и т.файл, а затем используйте Intent.Action_SEND вместе с Intent.CreateChooser, чтобы отправить файл в качестве вложения.Если ваш файл хранится внутри (то есть является частным), то вам также необходимо использовать ContentProvider (см. ссылка ).

Вот пример:

//For simplicity's sake let's say you have three methods 
//to get the value of your EditText, Spinner, 
//and DatePicker and these methods return a String

String editTextValue = getEditTextValue();
String spinnerTextValue = getSpinnerTextValue();
String datePickerTextValue = getDPTextValue();

//Create a String in csv format with the String values obtained 
//from the above fictitious methods. The delimiter in this case is the semicolon ";"

String myFileContentString = editTextValue + ";" + 
spinnerTextValue + ";" + 
datePickerTextValue + "\n";

//Save file to internal storage

FileOutputStream fos = openFileOutput("myfilename.csv", Context.MODE_WORLD_WRITEABLE);
fos.write(myFileContentString.getBytes());
fos.close();

//Send the file as an attachment

final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("plain/text");
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "A CSV File");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "See attachment...");
emailIntent.putExtra(android.content.Intent.EXTRA_STREAM, 
Uri.parse("content://" + MyContentProviderClass.AUTHORITY + "/" + "myfilename.csv"));
startActivity(Intent.createChooser(emailIntent, "Send mail..."));

Не забудьте перехватить исключения с помощью try / catch

Вам потребуется создать подкласс класса ContentProvider и переопределить метод openFile.См. Ссылки здесь и здесь , чтобы узнать, как реализовать свой собственный поставщик контента.

В своем подклассе ContentProvider вы захотите что-то вроде следующего в методе openFile:

String fileLocation = getContext().getFilesDir() + File.separator + "myfilename.csv";

ParcelFileDescriptor pfd = ParcelFileDescriptor.open(new File(fileLocation),
ParcelFileDescriptor.MODE_READ_ONLY);

return pfd;

И не забудьте обновить AndroidManifest.xml:

<provider android:name="my.package.content.provider.Class" 
android:authorities="my.package.content.provider"></provider></application>

Объявление провайдера в файле манифеста входит в объявление приложения.

...