- Работа с файловой системой
- Чтение и сохранение файлов
- ИнтеллигенцияX
- Как в Android Studio передавать данные на сервер в интернете
- Похожие записи:
- 4 комментария
- Отправка простых данных в другие android приложения
- В этом уроке
- Вы также должны прочитать
- [wpanchor >
- Отправка текстовых данных в android
- [wpanchor >
- Отправка двоичных данных в android
- [wpanchor >
- Как отправить несколько единиц контента в android
- Как отправить файлы в экземпляр эмулятора с помощью Android Studio
- 5 ответов
- Отправка E-Mail средствами Android
- Часть 1. Mail, просто Mail
- Часть 2. Mail, анонимус Mail
Работа с файловой системой
Чтение и сохранение файлов
Работа с настройками уровня activity и приложения позволяет сохранить небольшие данные отдельных типов (string, int), но для работы с большими массивами данных, такими как графически файлы, файлы мультимедиа и т.д., нам придется обращаться к файловой системе.
ОС Android построена на основе Linux. Этот факт находит свое отражение в работе с файлами. Так, в путях к файлам в качестве разграничителя в Linux использует слеш «/», а не обратный слеш «\» (как в Windows). А все названия файлов и каталогов являются регистрозависимыми, то есть «data» это не то же самое, что и «Data».
Приложение Android сохраняет свои данные в каталоге /data/data/ / и, как правило, относительно этого каталога будет идти работа.
Для работы с файлами абстрактный класс android.content.Context определяет ряд методов:
boolean deleteFile (String name) : удаляет определенный файл
String[] fileList () : получает все файлы, которые содержатся в подкаталоге /files в каталоге приложения
File getCacheDir() : получает ссылку на подкаталог cache в каталоге приложения
File getDir(String dirName, int mode) : получает ссылку на подкаталог в каталоге приложения, если такого подкаталога нет, то он создается
File getExternalCacheDir() : получает ссылку на папку /cache внешней файловой системы устройства
File getExternalFilesDir(String type) : получает ссылку на каталог /files внешней файловой системы устройства
File getFileStreamPath(String filename) : возвращает абсолютный путь к файлу в файловой системе
FileInputStream openFileInput(String filename) : открывает файл для чтения
FileOutputStream openFileOutput (String name, int mode) : открывает файл для записи
Все файлы, которые создаются и редактируются в приложении, как правило, хранятся в подкаталоге /files в каталоге приложения.
Для непосредственного чтения и записи файлов применяются также стандартные классы Java из пакета java.io.
Итак, применим функционал чтения-записи файлов в приложении. Пусть у нас будет следующая примитивная разметка layout:
Поле EditText предназначено для ввода текста, а TextView — для вывода ранее сохраненного текста. Для сохранения и восстановления текста добавлены две кнопки.
Теперь в коде Activity пропишем обработчики кнопок с сохранением и чтением файла:
При нажатии на кнопку сохранения будет создаваться поток вывода FileOutputStream fos = openFileOutput(FILE_NAME, MODE_PRIVATE)
В данном случае введенный текст будет сохраняться в файл «content.txt». При этом будет использоваться режим MODE_PRIVATE
Система позволяет создавать файлы с двумя разными режимами:
MODE_PRIVATE : файлы могут быть доступны только владельцу приложения (режим по умолчанию)
MODE_APPEND : данные могут быть добавлены в конец файла
Поэтому в данном случае если файл «content.txt» уже существует, то он будет перезаписан. Если же нам надо было дописать файл, тогда надо было бы использовать режим MODE_APPEND:
Для чтения файла применяется поток ввода FileInputStream :
Подробнее про использование потоков ввода-вывода можно прочитать в руководстве по Java: https://metanit.com/java/tutorial/6.3.php
В итоге после нажатия кнопки сохранения весь текст будет сохранен в файле /data/data/название_пакета/files/content.txt
Где физически находится созданный файл? Чтобы увидеть его на подключенном устройстве перейдем в Android Stud в меню к пункту View -> Tool Windows -> Device File Explorer
После этого откроектся окно Device File Explorer для просмотра файловой системы устройства. И в папке data/data/[название_пакета_приложения]/files мы сможем найти сохраненный файл.
Источник
ИнтеллигенцияX
Как в Android Studio передавать данные на сервер в интернете
Три поста назад я показал, как в Android Studio хранить локальные настройки (ФИО, должность и телефон спонсора — https://ds-release.ru/kak-rabotat-s-bazoj-dannyx-sqlite-v-android-studio/ ) в базе SQLite
А как передавать данные на центральный сервер приложения в интернете?
В данном примере сервер будет на php, но можно любой, данные будут передаваться на сервер методом POST.
Сначала в AndroidManifest.xml добавим строку
В activity_main.xml располагаем аналогичный (как в примере с SQLite) код
А вот в кнопке «Сохранить» напишем не сохранение в локальную SQLite, а передачу информации о спонсоре на сервер.
Для этого можно использовать, например, POST запрос с передачей параметров.
Используем асинхронное соединение с AsyncTask.
В файле MainActivity пишем такой код:
Если на сервере будет, например, php скрипт server.php такого содержания
Он запишет переданные в переменных данные в базу MySQL в таблицу DATA значения имени, должности и телефона.
Похожие записи:
4 комментария
Добрый день! Использую ваш код как исходник для своего приложения.
Я разрабатываю приложение WI-FI сканер, который после сканирования отправляет данные на сервер (данные такого типа имя сети, тип защиты, уровень сигнала, аппаратный адрес маршрутизатора) и при тестировании сервер не реагирует на то что я отправляю. На какой версии android работало у вас?
Подскажите пожалуйста причину?
Программирую недавно столкнулся вот с такой проблемой
Работало на всех аппаратах, на которых тестировал, андроид с 4 по 7
А Вы уверены, что проблема именно в версии андроида, а не на стороне веб сервера? Запускайте отладку, смотрите что передаете на сервер, со стороны сервера что на него приходит, думаю, разберетесь
Сделайте урок о том, как принимать данные с сервера. Спасибо
resultString = new String(data, «UTF-8»); // сохраняем в переменную ответ сервера, у нас «OK»
Вот и приняли данные с сервера :).
А потом с этим resultString можете делать, что хотите.
Источник
Отправка простых данных в другие android приложения
В этом уроке
Вы также должны прочитать
При создании намерения необходимо указать действие, которое намерение «вызывает». Android определяет ряд действий, в том числе ACTION_SEND которое, как вы можете догадаться, указывает на то, что интент передает данные из одной активити в другую, даже через границы процессов. Для передачи данных в другую активити, все, что вам нужно сделать, это указать данные и их тип, система определит совместимые принимающие активити, и отобразит их пользователю (если есть несколько вариантов) или немедленно запустит активити (если есть только один вариант). Подобным образом, вы можете объявить типы данных, прием которых ваша активити поддерживает из других приложений, указав их в своем манифесте.
Передача и прием данных между приложениями с помощью интентов чаще всего используется в приложениях социальных сетей для публикации контента. Интенты позволяют пользователям обмениваться информацией быстро и легко, используя свои любимые приложения.
Примечание: Лучшим способом добавить элемент для обмена данными в ActionBar является использование ShareActionProvider , который стал доступен в уровне API 14. ShareActionProvider обсуждается в уроке Добавление простого обмена данными.
[wpanchor >
Отправка текстовых данных в android
Рисунок 1. Скриншот ACTION_SEND интента , открывшего диалог выбора на телефоне.
Самый простой и распространенный способ использования действия ACTION_SEND это отправка текстового содержимого из одной активити в другую. Например, встроенный браузер приложение может поделиться ссылкой, отображаемой в данный момент страницы, в виде текста с любым приложением. Это полезно для обмена статьей или сайтом с друзьями по электронной почте или через социальные сети. Вот код реализации такого обмена:
Если есть установленное приложение с фильтром, который соответствует ACTION_SEND и MIME типу text/plain, Android система выполнит его; если более одного приложения соответствует критериям, система выведет диалоговое окно для разрешения противоречий («диалог выбора»), которое позволяет пользователю выбрать приложение.
Тем не менее, если вы вызовите Intent.createChooser() , передав в него ваш Intent объект, он возвращает версию вашего интента, которое будет всегда отображать диалог выбора. Это имеет несколько преимуществ:
- Даже если пользователь выбрал действие по умолчанию для этого интента, диалог выбора все еще будет отображаться.
- Если ни одно приложение не походит, Android отображает системное сообщение.
- Вы можете указать заголовок для диалога выбора.
Вот обновленный код:
Появившийся диалог показан на рисунке 1.
Опционально, вы можете установить некоторые стандартные дополнительные параметры для интентов: EXTRA_EMAIL , EXTRA_CC , EXTRA_BCC , EXTRA_SUBJECT . Если принимающее приложение не предназначено для их использования, оно просто игнорирует их.
Примечание: Некоторые приложения электронной почты, такие как Gmail, ожидают String[] для дополнительных данных, таких, как EXTRA_EMAIL и EXTRA_CC , используйте putExtra(String, String[]) для их добавления к вашим интентам.
[wpanchor >
Отправка двоичных данных в android
Бинарные данные передаются с помощью действия ACTION_SEND в сочетании с установкой соответствующего типа MIME и размещения URI в дополнительных данных с именем EXTRA_STREAM . Обычно это используется, чтобы поделиться изображением, но может использоваться для обмена любым типом двоичного содержимого:
Обратите внимание на следующее:
- Вы можете использовать MIME тип «*/*» , но это будет соответствовать только активити, которая в состоянии обрабатывать общие потоки данных.
- Принимающему приложению необходимо разрешение на доступ к данным, на которые указывает Uri . Рекомендуемые способы сделать это:
- Хранить данные в своём собственном ContentProvider , убедившись, что другие приложения имеют правильное разрешение на доступ к поставщику. Предпочитаемым механизмом обеспечения доступа является использование разрешения для URI , которые являются временными и предоставляют доступ только для принимающего приложения. Самый простой способ создать такой ContentProvider это использовать вспомогательный класс FileProvider .
- Использовать системный MediaStore . Хотя MediaStore в первую очередь нацелен на видео, аудио и MIME типы изображений, однако начиная с Android 3.0 (Уровень API 11) он может хранить не только медиа типы (см. MediaStore.Files для получения дополнительной информации). Файлы можно вставить в MediaStore с помощью метода scanFile() , после которого content:// стиль Uri подходит для совместного использования, передаваемого в предоставленный метод обратного вызова onScanCompleted() . Следует отметить, что контент, добавленный один раз в системный MediaStore доступен любому приложению на устройстве.
[wpanchor >
Как отправить несколько единиц контента в android
Чтобы поделиться несколькими единицами контента, используйте действие ACTION_SEND_MULTIPLE вместе со списком URI, указывающих на содержание. Тип MIME варьируется в зависимости от сочетания контента, которым вы обмениваетесь. Например, если вы обмениваетесь 3-мя JPEG изображениями, тип по-прежнему «image/jpeg» . При перемешивании типов изображений, он должнен быть «image/*» , чтобы соответствовать деятельности, которая обрабатывает любой тип изображений. Вы должны использовать «*/*» только если вы обмениваетесь широким спектром типов. Как отмечалось ранее, пора принимающему приложению анализировать и обрабатывать данные. Вот пример:
Источник
Как отправить файлы в экземпляр эмулятора с помощью Android Studio
Как я могу отправить файлы .txt в эмулятор с помощью Android Studio?
5 ответов
Вы можете использовать ADB через Terminal , чтобы передать файл с рабочего стола на эмулятор.
Вы также можете скопировать файл из эмулятора на Рабочий стол
Как вы можете также использовать Android Device Monitor для доступа к файлам. Нажмите на значок Android, который можно найти на панели инструментов. Загрузка займет всего несколько секунд. После загрузки вы можете увидеть вкладку с именем File Explorer . Теперь вы можете вытаскивать/отталкивать файлы оттуда.
Один простой способ — перетащить. Он скопирует файлы в /sdcard/Download. Вы можете скопировать целые папки или несколько файлов. Убедитесь, что включен параметр «Включить общий доступ к буферам обмена». (в разделе. — > Настройки)
Если вы хотите сделать это с помощью графического интерфейса, вы можете следить за этим в меню студии Android:
Инструменты → Android → Android Device Monitor
После этого откроется окно Android Device Monitor (DDMS), и вы сможете загружать файлы с помощью Проводника. Вы можете выбрать такой адрес, как /mnt/sdcard , а затем нажать файл в SD-карте.
В Android 6.0+ вы должны использовать тот же процесс, но ваше приложение для Android не может получить доступ к файлам, которые вставляются в SDCARD с помощью DDMS File Explorer. Это то же самое, если вы пытаетесь выполнить команды следующим образом:
Если вы столкнулись с EACCES (Permission denied) исключением, это означает, что у вас нет доступа к файлам внутри внешнего хранилища, так как это опасное разрешение.
В этой ситуации вам необходимо запросить разрешение доступа вручную, используя новую систему разрешений в Android 6.0 и в верхней версии. Более подробную информацию вы можете найти в андроидном учебнике и этой ссылке.
Источник
Отправка E-Mail средствами Android
Привет хабр и привет всем!
В данной статье я покажу как реализуется отправка писем средствами самого Android, а также ещё один более интересный способ, но уже с применением внешней библиотеки, которая позволяет нам отсылать письма более приемлимыми для программиста способами.
Часть 1. Mail, просто Mail
- public class SimpleEMail extends Activity <
- Button send;
- EditText address, subject, emailtext;
- @Override
- public void onCreate(Bundle savedInstanceState) <
- super.onCreate(savedInstanceState);
- setContentView(R.layout.simple_email);
- // Наши поля и кнопка
- send = (Button) findViewById(R.id.emailsendbutton);
- address = (EditText) findViewById(R.id.emailaddress);
- subject = (EditText) findViewById(R.id.emailsubject);
- emailtext = (EditText) findViewById(R.id.emailtext);
- send.setOnClickListener( new OnClickListener() <
- @Override
- public void onClick(View v) <
- final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
- emailIntent.setType( «plain/text» );
- // Кому
- emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
- new String [] < address.getText().toString() >);
- // Зачем
- emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
- subject.getText().toString());
- // О чём
- emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,
- emailtext.getText().toString());
- // С чем
- emailIntent.putExtra(
- android.content.Intent.EXTRA_STREAM,
- Uri .parse( «file://»
- + Environment.getExternalStorageDirectory()
- + «/Клипы/SOTY_ATHD.mp4» ));
- emailIntent.setType( «text/video» );
- // Поехали!
- SimpleEMail. this .startActivity(Intent.createChooser(emailIntent,
- «Отправка письма. » ));
- >
- >);
- >
- >
* This source code was highlighted with Source Code Highlighter .
Вот, код до безобразия прост. Правда можно еще проще: если нам лень создавать дополнительное Activity для ввода наших полей, то можно было бы просто запустить наш Intent.
Плюсы: Простая реализация, достаточно удобно для обратной связи.
Минусы: У пользователя должна быть настроенная программа приёма-передачи почтовых сообщений, без неё обрабатывать данный Intent будет некому.
Часть 2. Mail, анонимус Mail
Данный метод я использовал в своём проекте, обозначим для начала плюсы:
- Не требует от пользователя настроенного клиента
- Может быть полностью анонимным
- Можно передавать все (в пределах разумного, конечно)
Для работы необходимы дополнительные библиотеки javamail-android.
Качаем их, и встраиваем в проект: Контекстное меню проекта > «Build Path» > «Add External Archives. » > «Наши файлы additional, mail, activation»
Для настройки нам также понадобится почтовый ящик зарегистрированный на gmail.com (или любом другом yandex, mail и.т.п.) настройки вы можете посмотреть здесь. В данном случае он будет выступать в виде шлюза через которые будут проходить наши письма.
Начинаем настраивать:
MailSenderClass.java
В данном классе записаны настройки того сервера, через который будет передаваться ваше сообщение. Здесь у нас есть несколько методов:
- public MailSenderClass(String user, String password) — Конструктор. В качестве аргументов передаются логин и пароль от нашего промежуточного ящика на gmail.com. Здесь же прописываются параметры smtp-подключения к серверу.
- protected PasswordAuthentication getPasswordAuthentication() — Аутентификация для сервера.
- public synchronized void sendMail(String subject, String body, String sender, String recipients, String filename) — Основной метод, в который передаются наши данные для отправки.
Рассмотрим код последнего метода чуть ближе:
- public synchronized void sendMail( String subject, String body, String sender, String recipients, String filename) throws Exception <
- try <
- MimeMessage message = new MimeMessage(session);
- // Кто
- message.setSender( new InternetAddress(sender));
- // О чем
- message.setSubject(subject);
- // Кому
- if (recipients.indexOf( ‘,’ ) > 0)
- message.setRecipients(Message.RecipientType.TO,
- InternetAddress.parse(recipients));
- else
- message.setRecipient(Message.RecipientType.TO,
- new InternetAddress(recipients));
- // Хочет сказать
- BodyPart messageBodyPart = new MimeBodyPart();
- messageBodyPart.setText(body);
- _multipart.addBodyPart(messageBodyPart);
- // И что показать
- if (!filename.equalsIgnoreCase( «» )) <
- BodyPart attachBodyPart = new MimeBodyPart();
- DataSource source = new FileDataSource(filename);
- attachBodyPart.setDataHandler( new DataHandler(source));
- attachBodyPart.setFileName(filename);
- _multipart.addBodyPart(attachBodyPart);
- >
- message.setContent(_multipart);
- Transport.send(message);
- > catch (Exception e) <
- Log.e( «sendMail» , «Ошибка отправки функцией sendMail! » );
- >
- >
* This source code was highlighted with Source Code Highlighter .
Метод также прост. Используя объект класса MimeMessage составляем наше письмо и для отправки передаём методу send, класса Transport.
JSSEProvider.java
Провайдер протокола безопасности для нашей почты. Линк.
VideoSelect.java
Код был взят из ApiDemos, которые поставляются в комплекте с Android SDK, и был чуть подправлен для выполнения с помощью метода startActivityForResult.
После выполнения возвращается строка, содержащая путь к файлу на карте памяти. Код можно будет посмотреть в проекте, он в конце статьи.
ExtendedMail.java
Основной метод отправления сообщения выполняется в функции sitv_sender_mail_async, представляющей класс AsyncTask:
- private class sender_mail_async extends AsyncTask String , Boolean><
- ProgressDialog WaitingDialog;
- @Override
- protected void onPreExecute() <
- // Выводим пользователю процесс загрузки
- WaitingDialog = ProgressDialog.show(ExtendedMail. this , «Отправка данных» , «Отправляем сообщение. » , true );
- >
- @Override
- protected void onPostExecute(Boolean result) <
- // Прячем процесс загрузки
- WaitingDialog.dismiss();
- Toast.makeText(mainContext, «Отправка завершена. » , Toast.LENGTH_LONG).show();
- ((Activity)mainContext).finish();
- >
- @Override
- protected Boolean doInBackground(Object. params ) <
- try <
- // Получаем данные с наших полей
- title = ((EditText)findViewById(R.id.screen_sendnews_et_title)).getText().toString();
- text = ((EditText)findViewById(R.id.screen_sendnews_et_text)).getText().toString();
- from = «from_post_msg@gmail.com» ;
- where = «where_post_msg@yandex.ru» ;
- // Вызываем конструктор и передаём в него наши логин и пароль от ящика на gmail.com
- MailSenderClass sender = new MailSenderClass( «mypostmail@gmail.com» , «password» );
- // И вызываем наш метод отправки
- sender.sendMail(title, text, from , where , attach);
- > catch (Exception e) <
- Toast.makeText(mainContext, «Ошибка отправки сообщения!» , Toast.LENGTH_SHORT).show();
- >
- return false ;
- >
- >
* This source code was highlighted with Source Code Highlighter .
- public void onClick(View v) <
- sender_mail_async async_sending = new sender_mail_async();
- async_sending.execute();
- >
* This source code was highlighted with Source Code Highlighter .
Таким образом создав небольшой класс-поток, можно спокойно слать необходимую информацию от клиента к себе на ящик.
Источник