Если вы прочитали предыдущую статью (Создание простого MAF ( ADF Mobile) приложения в JDeveloper 12c), то уже научились создавать простые мобильные приложения. Теперь давайте изучим как в Oracle MAF происходит взаимодействие с устройствами смартфона.
- Через декларативный Data Control
- Через MAF Java API
- Через JavaScript API
Рассмотрим работу этих механизмов.
Декларативный Data Control
Любое MAF приложение имеет data control с именем DeviceFeatures. При помощи этого data control-а можно очень легко создать формы для взаимодействия с устройствами смартфона
В таблице ниже я опишу эти методы :
Название метода | Описание | Входящие данные | Возвращаемые данные |
createContact | Создается контакт в записной книжке смартфона | Contact aContact | Contact contact - созданный контакт |
displayFile | Отображает файл с телефона. В зависимости от платформы, приложения пользователя могут просматривать PDF-файлы, файлы изображений, документы Microsoft Office, а также различные другие типы файлов. |
String fileURL String HeaderText |
- |
findContacts | Происходит поиск контактов в записной книжке смартфона | String contactFields String filter boolean multiple |
Contact aContact |
removeContact | Удаляется контакт в записной книжке | Contact aContact | - |
updateContact | Обновляется контакт в записной книжке | Contact aContact | Contact aContact |
sendEmail | Отправка e-mail | String to String cc String subject String body String bcc String attachments String mimeTypes |
- |
sendSMS | Отправка SMS | String to String body |
- |
startLocationMonitor | Метод для получения регулярных обновлений позиции устройства | boolean enableHighAccuracy int updateInterval String locationListener |
- |
getPicture | Сделать снимок при помощи камеры | int quality int destinationType int sourceType boolean allowEdit int encodingType int targetWidth int targetHeight |
String result |
Вид при переносе на страницу и описание входящих и исходящих данных:
1. createContact
После нажатия на createContact, будут создана запись с данными из aContact в контактах вашего смартфона.
Составной Тип Contact имеет следующие поля:
String displayName - имя
String familyName - фамилия
String nickname - ник
ContactField[] phoneNumbers - телефонные номера
ContactField[] emails - электронные почты
ContactAddresses[] addresses- адреса
ContactField[] ims - ims
ContactOrganization[] organizations - организации
Date birthday - день рожденья
String note - примечание
ContactField[] photos - фотографии
ContactField[] categories - категории
ContactField[] urls - url адреса
Пример заполнения данными:
String givenName = "Mikhail";
String familyName = "Peraviortkin";
String note = "Note.....";
String phoneNumberType = "mobile";
String phoneNumberValue = "375-297-1234";
String emailType = "home";
String emailValue = "perevertkinma@gmail.com";
String addressType = "home";
String addressStreet = "Suvorova";
String addressLocality = "Brest";
String addressCountry = "Belarus";
String addressPostalCode = "224022";
ContactField[] phoneNumbers = null;
ContactField[] emails = null;
ContactAddresses[] addresses = null;
Contact aContact = new Contact();
ContactName name = new ContactName();
name.setFamilyName(familyName);
name.setGivenName(givenName);
aContact.setName(name);
ContactField phoneNumber = new ContactField();
phoneNumber.setType(phoneNumberType);
phoneNumber.setValue(phoneNumberValue);
phoneNumbers = new ContactField[] { phoneNumber };
ContactField email = new ContactField();
email.setType(emailType);
email.setValue(emailValue);
emails = new ContactField[] { email };
ContactAddresses address = new ContactAddresses();
address.setType(addressType);
address.setStreetAddress(addressStreet);
address.setLocality(addressLocality);
address.setCountry(addressCountry);
addresses = new ContactAddresses[] { address };
aContact.setNote(note);
aContact.setPhoneNumbers(phoneNumbers);
aContact.setEmails(emails);
aContact.setAddresses(addresses);
2. displayFile
fileURL - абсолютный адрес к файлуheaderText - текст отображаемый в заголовке файла (только для iOS)
3.findContacts
Для поиска контактов используется три переменных
filter - сам критерий поиска. Например "Misha"
multiple - устанавливается "true", если хотите, что бы вывелись все результаты поиска, и "false" если необходим только первый результат поиска( по умолчанию false)
4 - 5.У removeContact и updateContact так же как и createContact создается только кнопка, выполняющую необходимую операцию.
6. sendEmail
7. sendSMS
8.startLocationMonitor
MAF Java API
Автоматически созданные формы и кнопки конечно милые, но они вряд ли подойдут для вашего будущего приложения. Если вы хотите более глубокое взаимодействие с устройствами, вам необходимо использовать Java API. При помощи Java API вы можете напрямую получить доступ к устройствам из ваших bean-ов и вызывать в любой момент. В MAF Java APIs для этого используется DeviceManager, он дает дает доступ к функциям устройства. Для начала работы с DeviceManager нужно выполнить следующий код :
DeviceManager dm=DeviceManagerFactory.getDeviceManager();
Далее нужно вызвать необходимый метод, например для отправки SMS нужно выполнить следующий метод:
dm.sendSMS("+375297939111", "Смска");
Весь список методов описан в в Oracle Fusion Middleware Java API Reference for Oracle Mobile Application Framework
JavaScript API
В MAF так же существует возможность работы с устройствами через JavaScript.
в скрипте просто нужно вызвать необходимый метод, например:
adf.mf.api.sendSMS({to: "375297939111", body: "Смска"}, success, failed);
Объект DeviceScope
MAF также поддерживает возможность получать характеристики устройства в режиме реального времени на странице. Для этого используется объект DeviceScope . Это может пригодиться допустим для того, что бы отображать кнопку "сделать фото", если в устройстве присутствует камера. На странице это будет выглядеть так
Свойство
|
Описание
|
EL Expression
|
---|---|---|
device.name |
Возвращает название устройства
|
#{deviceScope.device.name} |
device.platform |
Возвращает платформу устройства. Например : "iPhone"
|
#{deviceScope.device.platform} |
device.version |
Возвращает версию платформы.Например :
""5.0.2""
|
#{deviceScope.device.version} |
device.os |
Возвращает название ОС
|
#{deviceScope.device.os} |
device.model |
Возвращает модель. Например : "i386"
|
#{deviceScope.device.model} |
device.phonegap |
Возвращает версию phonegap
|
#{deviceScope.device.phonegap} |
hardware.hasCamera |
возвращает true при наличии камеры
|
#{deviceScope.hardware.hasCamera} |
hardware.hasContacts |
возвращает true при наличии контактов
|
#{deviceScope.hardware.hasContacts} |
hardware.hasTouchScreen |
возвращает true при наличии TouchScreen
|
#{deviceScope.hardware.hasTouchScreen} |
hardware.hasGeolocation |
возвращает true при наличии gps
|
#{deviceScope.hardware.hasGeolocation} |
hardware.hasAccelerometer |
возвращает true при наличии акселерометра
|
#{deviceScope.hardware.hasAccelerometer} |
hardware.hasCompass |
возвращает true при наличии компаса
|
#{deviceScope.hardware.hasCompass} |
hardware.hasFileAccess |
возвращает true при наличии доступа к файлам
|
#{deviceScope.hardware.hasFileAccess} |
hardware.hasLocalStorage |
возвращает true при наличии локальный устройств для хранения данных
|
#{deviceScope.hardware.hasLocalStorage} |
hardware.hasMediaPlayer |
возвращает true при наличии медиа проигрывателя
|
#{deviceScope.hardware.hasMediaPlayer} |
hardware.hasMediaRecorder |
возвращает true при возможности записи медиа
|
#{deviceScope.hardware.hasMediaRecorder} |
hardware.networkStatus |
Возвращает статус сети:
"wifi", "2g", "unknown", "none"
|
#{deviceScope.hardware.networkStatus} |
hardware.screen.width |
Возвращает ширину экрана
|
#{deviceScope.hardware.screen.width} |
hardware.screen.height |
Возвращает высоту экрана
|
#{deviceScope.hardware.screen.height} |
hardware.availableWidth |
Возвращает допустимую ширину
|
#{deviceScope.hardware.screen.availableWidth} |
hardware.availableHeight |
Возвращает допустимую
высоту
|
#{deviceScope.hardware.screen.availableHeight} |
hardware.screen.dpi |
Возвращает dpi
|
#{deviceScope.hardware.screen.dpi} |
hardware.screen.diagonalSize |
Возвращает размер диагонали у экрана
|
#{deviceScope.hardware.screen.diagonalSize} |
hardware.screen.scaleFactor |
возвращает ScaleFactor
|
#{deviceScope.hardware.screen.scaleFactor} |
Комментариев нет:
Отправить комментарий