IE 2016

Запуск приложения мобильного устройства - что это?

Опубликовал DitriX в раздел Программирование - Практика программирования

В этой статье я попробую ответить на этот вопрос.
А также посмотрим, как сканировать камерой, как отправлять почту и как делать фото (или видео и в любом качестве), причем не встроенными средствами 1С.

Добрый день.

Наконец у меня дошли руки до разбора нового функционала по мобильной платформе.

В частности, как вы поняли из заголовка статьи – речь пойдет о таком новом объекте, как ЗапускПриложенияМобильногоУстройства.

К сожалению, я не смогу в статье поделиться абсолютно всеми вещами, и добиться понимания читателем всей информации, так как тут будет слишком много специфики по Андроиду.

Но в любом случае попробую донести основную идею.

Итак, что это за такой интересный объект, вокруг которого крутится столько вопросов в инете, и нет ответов, а только догадки.

В двух словах – этот объект позволяет вызвать другое приложение из андроида, и получить ответ от него.

Например, вы можете открыть почту и передать в нее все нужные данные.

Давайте начнем с чего-то малого, но не менее интересного. К примеру – попробуем просканировать штрих-код при помощи камеры телефона, но не средствами 1С, а вызовем специальную программу.

Для этого необходимо установить на телефон программу вот эту.

Далее – создаем кнопку в 1С с вот такой функцией:

Процедура ПроверитьВзаимодействие(Команда)
    НовВз=Новый ЗапускПриложенияМобильногоУстройства();
    НовВз.Действие="com.google.zxing.client.android.SCAN";
    Сообщить(НовВз.Запустить(Истина));
    ДляКаждогоСтрИзНовВз.ДополнительныеДанныеЦикл
        Сообщить(Стр.Ключ+" - "+Стр.Значение);
    КонецЦикла;
КонецПроцедуры

Обновляем конфигурацию и нажимаем кнопку. У меня отображается вот такое окно:

Выбираем Сканер штрих-кодов и сканируем что-то, и видим ответ:

 

В ответ мы получили результат работы, тот что «-1», и получили результаты сканирования, а именно – штрих-код и тип штрих-кода.

Ну как? Интересно? Если да, то давайте будем копать глубже.

Тут нам однозначно поможет справка 1С, или не поможет?

ЗапускПриложенияМобильногоУстройства (MobileDeviceApplicationRun)

Свойства:

Данные (Data)
Действие (Action)
ДополнительныеДанные (AdditionalData)
ИмяКласса (ClassName)
Категория (Category)
Приложение (Package)
Тип (Type)

Методы:

Запустить (Run)

Описание:

Предназначен для запуска внешних приложений.
В отличие от метода ЗапуститьПриложение позволяет передать в приложение параметры.
Доступен только на устройствах под управлением операционной системы Android.

Из справки, нам стало понятно, что работает это все только на Андроид, ну в принципе ничего странного.

Идем дальше. У нас есть определенные свойства и есть один метод.

Давайте разберем некоторые свойства:

Данные – это URIссылка, помните, мы ранее уже говорили про это в вот этой статье. Т.е. если мы хотим запустить браузер, тот тут мы передаем адрес страницы.

Действие – тут мы с вами описывали то, что мы хотим от мобильной платформы. В справке 1С очень скромно про это написали. Но мы вернемся чуть позже.

Категория – это уточняющая информация для описания действия. Например, если это приложение может делать много чего, то вы указываете конкретно что вы хотите. Либо можно запустить приложение по умолчанию, если оно назначено.

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

 

Приложение - тут мы можем указать какое именно приложение (его идентификатор) мы хотим использовать для наших действий, например - "com.google.android.gm", в этом случае откроется Gmail.

ИмяКласса - указывается в паре с приложением, выудить его можно при декомпиляции программы в манифесте, ну или в мануале, если есть, в случае Gmail - "com.google.android.gm.ComposeActivityGmail".

Если казать только приложение или только имя класса - ничего не произойдет. Их есть смысл указывать только в том случае, если вы понимаете о чем идет речь :) При этом можно не указывать Категорию.

В версии 8.3.5.79 исправлен баг (№30010918):

Описание:

В мобильной платформе у обьекта ЗапускПриложенияМобильногоУстройства при вызове метода Запустить игнорируется свойство Приложение, если не установлено свойство ИмяКласса.
 

ДополнительныеДанные – это (типо) структура, в которой мы описываем все параметры для передачи нашему приложению. И в ЭТУ ЖЕ структуру возвращается ответ. Тут не стоит забывать про третий параметр, это тип данных, например, в случае работы с фото, или прикрепляя к письму вложения - мы должны указать Uri представление, так как 1С не значет что это такое, то мы указываем путь и третьим параметром указываем тип, например - "Uri".


Тип – тут следует указать MIMEтип, например, для отправки почты вам надо указать "message/rfc822", а если хотите открыть контакт, то должны указать тип контакта, и т.д.

Метод Запустить – на самом деле тут два метода. Если передаете в параметр Истина, то приложение может вернуть некий код своей работы. Вот как в браузере, если страница не найдена – возвращает код ошибки 404. Если же его переключить в режим Ложь, то он будет работать как индикатор успешного выполнения приложения, т.е. вернет Истину, если же была ошибка, то вернет Ложь.


Что же это все за данные и откуда их брать?

Если в двух словах, то программы на Андроиде могут создавать Намерения (Intent) и обрабатывать их.

Т.е., когда программа написана специальным образом, то при установке она создает ассоциации с некоторыми событиями и их обработкой. В 1С есть хороший аналог – Оповестить() и ОбработкаОповещения(), но только в случае 1С – это локально, а в случае Андроид – глобально.

И ясное дело, что должны быть соответствующие инструкции по работе с ними.

Идем на сайт разработчиков и читаем - https://code.google.com/p/zxing/source/browse/trunk/android/src/com/google/zxing/client/android/Intents.java

Вот это определение доступных режимов. Например, можете попробовать вызвать вот такой экшн (действие) :

"com.google.zxing.client.android.SHARE"

Посмотрите, что будет.

Теперь давайте отправим почту, за основу я взял первую попавшуюся статью:

Первое на что я смотрю:

IntentemailIntent = newIntent(Intent.ACTION_SEND);

Теперь тут надо быть внимательней. Так как вот это Intent.ACTION_SEND сокращение от android.Intent.action.SEND, а 1С не понимает сокращений, так что не попадайтесь на такие детские ошибки.

Поэтому пишет вот так и тестируем.

Процедура ПроверитьВзаимодействие(Команда)
    НовВз=Новый ЗапускПриложенияМобильногоУстройства();
    НовВз.Действие="android.Intent.action.SEND"; 
    Сообщить(НовВз.Запустить(Истина));
КонецПроцедуры

В ответ мы получим «0», и ничего не произойдет. Почему? Ну так все же очевидно, видь должно быть написано не:

android.Intent.action.SEND

а:

android.intent.action.SEND

Разве не понятно? J

Меняем регистр букв, и, о чудо – у нас открылась куча приложений, которые могут отработать это событие. Давайте уточним поиск, для этого укажем тип, но не тот, который в статье той, так как количество приложений не уменьшится, а вот такой:

НовВз.Тип="message/rfc822";

Теперь нажав кнопку – у нас откроется значительно меньше приложений.

Ну и можем выбрать Gmail.

Теперь давайте заполним что-то, ну, например, тему и тело письма. В том примере это делается вот так:

emailIntent.putExtra(Intent.EXTRA_SUBJECT, "subject of email");

emailIntent.putExtra(Intent.EXTRA_TEXT   , "body of email");

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

Мы же должны написать вот так:

    НовВз.ДополнительныеДанные.Добавить("android.intent.extra.SUBJECT","Тема письма");  

    НовВз.ДополнительныеДанные.Добавить("android.intent.extra.TEXT","Текст письма");

В итоге – открыв Gmail, там заполнятся эти поля. Кроме этого, если у вас установлен скайп, то можете попробовать это же выполнить с ним.

Итог

1С дала очень мощный механизм работы с ее продуктом. Это по сути реализация намерений из андроида, и пока, увы, 1С может выступать только как инициатор, но начало положено! Делать можно много чего при помощи этих функций, я указал лишь самые простые вещи, что бы показать суть, показав это вашему андроид программисту, вы сможете сэкономить часы, если не дни нахождения общего языка.

Дополнение

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

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

Работать с ней вот так:

Процедура ПроверитьВзаимодействие(Команда)
    НовВз=Новый ЗапускПриложенияМобильногоУстройства();
    НовВз.Действие="com.ditrix.ownaction.SHOW_TOAST"
    НовВз.ДополнительныеДанные.Добавить("com.ditrix.ownaction.EXTRAS_MESSAGE","Данные");

    Сообщить(НовВз.Запустить(Истина));

    Для Каждого Стр ИзНовВз.ДополнительныеДанные Цикл
        Сообщить(Стр.Ключ+" - "+Стр.Значение);
    КонецЦикла;
КонецПроцедуры

Это для простого сообщения, а вот это действие для пуша:

"com.ditrix.ownaction.SHOW_NOTIFICATION"

При этом вам вернется ответ в виде 3 данных разных типов.

Удачи!

 

Фабрика знаний

Тут будут писаться примеры реализации тех или иных механизмов.


Как сделать фото (видео) в любом качестве?


Учтите - работает не везде, зависит от приложения, при помощи которого делается фото. У меня на Cyan прошивке - все отрабатывало нормально.

    //Тут указываем путь, при чем путь должен быть доступен всем программам, так что временные файлы 1С не подйут
    ФайлКартинки = "file:///sdcard/Download/FotoTestFrom1C.bmp";
    НовВз = Новый ЗапускПриложенияМобильногоУстройства("android.media.action.IMAGE_CAPTURE");

    //Обязательно указываем этот параметр, если его не указать, тогда вам вернется привью файла в низком качестве и находится он будет в параметрах с ключем data.
    НовВз.ДополнительныеДанные.Добавить("output",ФайлКартинки,"Uri");

    //Если фото не сделано, то ответ будет "0"
    Если НовВз.Запустить(Истина)  0 Тогда

    //ну а тут уже готовое фото, так что все что хотим, то и делаем.
        ЗапуститьПриложение(ФайлКартинки);
    Иначе
        Сообщить("Фото не сделано!");
    КонецЕсли;

Как отправить файл в разные программы? Спасибо Снежане

НовВз = Новый ЗапускПриложенияМобильногоУстройства();
НовВз.Действие = "android.intent.action.SENDTO";
НовВз.Данные = "mailto:test@test.ru";
НовВз.ДополнительныеДанные.Добавить("android.intent.extra.STREAM","file:///storage/emulated/0/Снежана/CDAInfo.txt","Uri");
НовВз.ДополнительныеДанные.Добавить("android.intent.extra.SUBJECT","Тема письма");
НовВз.ДополнительныеДанные.Добавить("android.intent.extra.TEXT","Теекст-текст-текст");
НовВз.Запустить(Истина);

Как отправить файл только по почте? Спасибо Снежане

Должен быть установлен клиент Gmail

НовВз = Новый ЗапускПриложенияМобильногоУстройства();
НовВз.Действие = "android.intent.action.SEND";
НовВз.Данные = "test@test.ru";
НовВз.ДополнительныеДанные.Добавить("android.intent.extra.STREAM","file:///storage/sdcard0/DCIM/Camera/20140829_115820.jpg","Uri");
НовВз.ДополнительныеДанные.Добавить("android.intent.extra.SUBJECT","Тема письма");
НовВз.ДополнительныеДанные.Добавить("android.intent.extra.TEXT","Теекст-текст-текст");
НовВз.Тип = "text/plain";
//чтобы сразу Gmail открывался
НовВз.Приложение = "com.google.android.gm";
НовВз.ИмяКласса = "com.google.android.gm.ComposeActivityGmail";
//
НовВз.Запустить(Истина);

Пример работы с Viber'ом. Спасибо Снежане

//Открывает вайбер 
НовВз.Действие = "com.viber.voip.action.CONVERSATION";
//или
НовВз.Действие = "com.viber.voip.action.MESSAGES";


//Открывает список контактов в вайбере
НовВз.Действие = "android.intent.action.CALL_BUTTON";


//открывает диалог с конкретным человеком в вайбере
НовВз.Действие = "android.intent.action.SENDTO";
НовВз.Данные = "smsto:+380965336452";
НовВз.Приложение = "com.viber.voip"; 
НовВз.ИмяКласса = "com.viber.voip.SystemDialogActivityPublic";
//Отправить текст по вайберу, предлагает выбрать, кому отправлять, потом сразу отправляет
НовВз.Действие = "android.intent.action.SEND";
НовВз.Приложение = "com.viber.voip"; 
НовВз.ИмяКласса = "com.viber.voip.WelcomeShareActivity"; 
НовВз.Тип = "text/plain";
НовВз.ДополнительныеДанные.Добавить("android.intent.extra.TEXT","ТЕКСТ: Теекст-текст-текст");


//Отправить фото по вайберу, предлагает выбрать, кому отправлять
НовВз.Действие = "android.intent.action.SEND";
НовВз.Приложение = "com.viber.voip"; 
НовВз.ИмяКласса = "com.viber.voip.WelcomeShareActivity"; 
НовВз.Тип = "image/jpeg";
НовВз.ДополнительныеДанные.Добавить("android.intent.extra.STREAM","file:///storage/emulated/0/DCIM/100ANDRO/DSC_0001.jpg","Uri");
//Открыть контакт в вайбере
НовВз.Действие = "android.intent.action.VIEW";
НовВз.Данные = "tel:+380965336452";
НовВз.Приложение = "com.viber.voip"; 
НовВз.ИмяКласса = "com.viber.voip.WelcomeShareActivity";

Еще можно открыть контакты устройства и выбрать конкретный контакт, но вот проблема в том, что получаем в итоге Uri-ссылку на контакт, а 1С с ней ничего сделать не может... а хотелось бы данные вытянуть.

Написали в пожелания создание Локального ключа контакта на основании Uri-ссылки.

Спасибо Снежане

// Выбор контакта
Запуск = Новый ЗапускПриложенияМобильногоУстройства();
Запуск.Действие = "android.intent.action.PICK";
Запуск.Тип = "vnd.android.cursor.dir/contact";
Запуск.Запустить(Истина);
Строка = Запуск.Данные;
//Открытие по ссылке
Запуск = Новый ЗапускПриложенияМобильногоУстройства();
Запуск.Действие = "android.intent.action.VIEW";
Запуск.Данные = Строка;
Запуск.Запустить(Истина);

Как правильно указывать путь к файлам? Спасибо Вадиму

Когда мы сохраняем файл средствами моб платформы через

КаталогВременныхФайлов() + "sticker.pdf"


То этот файл недоступен другим приложениям. Можно писать так:

"file:///sdcard/sticker.pdf"


но теоретически карты памяти может и не быть. Поэтому есть более методически правильный метод:

КаталогДокументов() + "sticker.pdf";

Как выбрать файл нужного типа, при помощи менеджера файлов?

Обратите внимание на то, что у вас должен вернуться именно путь к файлу.
Он может быть или в виде content или в виде file, тогда все норм. Однако, если вернется провайдер, например, content://com.android.providers.media.documents/.... то это фигня.
1С с таким работать не сможет. Все зависит от прогаммы, при помощи которой делается выбор. К примеру - если использовать графу "Недавние", то может вернуться провайдет.
Вообщем экспериментировать надо.

 

НовВз = Новый ЗапускПриложенияМобильногоУстройства();
НовВз.Действие = "android.intent.action.GET_CONTENT";
//Указываем тип искомых файлов, нас интересует только фото
НовВз.Тип = "image/*"; //"file/*"; //"*/*"
//Говорим что интересуют только локальные данные, а не облачные
НовВз.ДополнительныеДанные.Добавить("android.intent.extra.LOCAL_ONLY",Истина);
РезультатРаботы = НовВз.Запустить(Истина);
Если НЕ РезультатРаботы Тогда
	Сообщить("Файл не выбран!");
	Возврат
КонецЕсли;
ПутьКФайлу = НовВз.Данные;

Как обрезать выбранное фото?

 

НовВз = Новый ЗапускПриложенияМобильногоУстройства("com.android.camera.action.CROP", ПутьКФайлу);		
НовВз.Тип = "image/*";
НовВз.ДополнительныеДанные.Добавить("return-data", true);
		
РезультатРаботы = НовВз.Запустить(Истина);
Если НЕ РезультатРаботы Тогда
	Сообщить("Фото не обработано!");
	Возврат
КонецЕсли;

ФайлВр = ПолучитьИмяВременногоФайла("jpg"); 
НовВз.ДополнительныеДанные.Получить("data").Значение.Записать(ФайлВр); // тут и будет сама картинка, которую можно запихнуть в 1С
ЗапуститьПриложение(ФайлВр);



Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Пушы и тосты для тестов
.apk 53,08Kb
12.09.14
29
.apk 53,08Kb 29 Скачать
Исходники (клиента и сервиса)
.zip 4,19Mb
17.09.14
44
.zip 4,19Mb 44 Скачать

См. также

Лучшие комментарии

43. ignorant 25.11.2014 15:40
Автору - огромное спасибо, выдает "нагора" массу полезной информации!
Кандидат в "Фабрику знаний" - вкл / выкл приемник GPS

// GPS On
Запуск = Новый ЗапускПриложенияМобильногоУстройства();
Запуск.Действие = "android.location.GPS_ENABLED_CHANGEPICK";
Запуск.Данные 	= "enabled:true";
Запуск.Запустить(Истина);

// GPS Off
Запуск = Новый ЗапускПриложенияМобильногоУстройства();
Запуск.Действие = "android.location.GPS_ENABLED_CHANGEPICK";
Запуск.Данные 	= "enabled:false";
Запуск.Запустить(Истина);
...Показать Скрыть
+ 3 [ mojo.aka; dablack; DitriX; ]
# Ответить
49. DitriX 04.02.2015 13:53
(48) смотрите вот этот кусок в этой публикации "Как сделать фото (видео) в любом качестве?"
И при запуске - у вас будет вопрос - что выбрать. Выберите камеру и скажете что бы выбиралось всегда по умолчанию.
Либо можно доп параметрами указать конкретное приложение, как это сделать - указано в статье
+ 1 [ kingartos; ]
# Ответить
41. DitriX 22.11.2014 13:32
(40) потому что:
file:///sdcard/Download/FotoTestFrom1C.bmp - это URI
/sdcard/Download/FotoTestFrom1C.bmp - а это просто путь или path.

uri - Universal resource Identifier.
Эта штука включает в себя:
- схему доступа
- путь к элементу
- идентификатор элемента
т.е. например к записи в БД ты можешь создать uri.
Типичный URI:
jdbc:mysql://localhost/niflheim?useUnicode=true&characterEncoding=utf-8
А path это путь к объекту файловой системы.

Андроид обычно работает с uri, так как он должен понимать - вы указали путь к файлу, или это путь к записи в бд.

Если привести анологию в 1С, то в 1С есть такая фишка, как ссылка на объект.
К примеру:
e1cib/data/Справочник.Пользователи?ref=8259005056c0000811e4723249a21e41 - это путь к элементу справочника, в котором указывается, что это конкретно справочник, и не просто справочник, а вполне определенный справочник, или в андроиде - это URI

С другой стороны:
8259005056c0000811e4723249a21e41 - это просто ID, или в андроиде - path.

Вы если хотите обратиться к элементу, вы не можете просто взять указать ID и получить объект, вам надо указать - что это за объект.

Вот тут тоже самое. Т.е. когда вы делаете запись фото - вы должны указать для андроида uri, тогда он поймет, что это файл и где он лежит.
С другой стороны, когда вы получаете файл из 1С, то 1С уже и сама знает, что работать вы будете только с файлом и все.
Поэтому ей достаточно указать просто путь, а вот уже сама 1С, внутри своей системы - по этому пути получит uri и будет с ним работать.

Надеюсь я понятно объяснил?
Ответили: (42)
+ 1 [ Vedich; ]
# Ответить
47. DitriX 04.02.2015 12:36
(46) автоматически вызывается из 1с? Ну так вызовите свое приложение камеры. Я вот это люблю https://play.google.com/store/apps/details?id=fr.xplod.focal&hl=ru
+ 1 [ 1cWin; ]
# Ответить
2. DitriX 16.09.2014 14:05
(1) очень сильно сомневаюсь :)
+ 1 [ DanilaDru; ]
# Ответить

Комментарии

1. flyer 16.09.2014 12:01
ждем что то аналогичное для ios
Ответили: (2)
# Ответить
2. DitriX 16.09.2014 14:05
(1) очень сильно сомневаюсь :)
+ 1 [ DanilaDru; ]
# Ответить
3. infosoft-v 16.09.2014 12:42
Добрый день. А такие приёмы требуют прав суперпользователя в устройстве на андроид?
# Ответить
4. DitriX 16.09.2014 15:00
(3)Нет, это стандартный механизм.
# Ответить
5. dj_serega 16.09.2014 16:12
А можно где-то посмотреть общий список команд которые можно выполнить?
Ответили: (7)
# Ответить
6. AlX0id 16.09.2014 15:30
А я говорил, что интенты добавят :)
Ответили: (7)
# Ответить
7. DitriX 16.09.2014 18:08
(5) можно - для этого надо уже понимать основы программирования под андроид. И, увы, почему то далеко не все работает.
Ну вот на офф сайте http://developer.android.com/guide/components/intents-common.html

(6) теперь ждем момента, когда 1с сможет быть сервером броэдкаста, а то посылать она оповещения то может, а вот прослушивать - нет. А как было бы круто :)
Присылаешь линк, как в уф, на товар или накладную - открывается 1с с этим товаром/накладной :)
Ответили: (93)
# Ответить
8. allegrosoft (файл скачал) 16.09.2014 18:24
С какого релиза все это стало возможно?
Ответили: (9)
# Ответить
9. flyer 16.09.2014 19:10
(8) allegrosoft, 8.3.5
Ответили: (110)
# Ответить
10. allegrosoft (файл скачал) 17.09.2014 09:33
А можно исходники приложения?))
Ответили: (11)
# Ответить
11. DitriX 17.09.2014 14:52
(10) можно все :) Позже обновлю статью и добавлю исходники
Ответили: (12)
# Ответить
12. allegrosoft (файл скачал) 17.09.2014 14:57
(11)Спасибо!
Ответили: (13)
# Ответить
13. DitriX 17.09.2014 18:16
(12) добавил
# Ответить
14. sergei_tekh (файл скачал) 22.09.2014 16:30
В эмуляторе (VMware) метод тоже должен работать? У меня ничего не происходит и никаких ошибок не выдаётся.
Ответили: (15)
# Ответить
15. DitriX 22.09.2014 16:47
(14) смотря что вы тестируете.
Ответили: (16)
# Ответить
16. sergei_tekh (файл скачал) 22.09.2014 17:36
(15) попробовал все примеры, что здесь были. Допустим, отправку почты:
&НаКлиенте
Процедура Сообщения(Команда)
	
    НовВз = Новый ЗапускПриложенияМобильногоУстройства();
    НовВз.Действие = "android.intent.action.SEND"; 
    Сообщить(НовВз.Запустить(ложь));
	
КонецПроцедуры
...Показать Скрыть

Метод "Запустить" выдает всегда Ложь (или 0, в зависимости от параметра метода)
Ответили: (18)
# Ответить
17. allegrosoft (файл скачал) 22.09.2014 18:21
Проект в Eclipce разработан? Что-то не пойму, как -то криво в eclipce открывается.
Ответили: (18)
# Ответить
18. DitriX 22.09.2014 19:03
(16) странно, но боюсь что тут не пдскажу в чем дело, может нет ни одного приложения, которое должно откликнуться.ъ
(17) писали в IDEA
# Ответить
19. CyberCerber 07.10.2014 13:24
Спасибо за полезную статью по интересной теме!

Попробовал примеры из статьи. Поставил прогу для штрих-кодов, запустил команду, да, сработало.

Но не работает команда "android.intent.action.SEND". При этом установлен тот же GMail, смотрел в его манифесте, там эта команда в интентах есть. Не знаете, в чем может быть дело?
Ответили: (20)
# Ответить
20. DitriX 07.10.2014 15:56
(19) CyberCerber, вы делаете вот так:
Процедура ПроверитьВзаимодействие(Команда)

    НовВз=Новый ЗапускПриложенияМобильногоУстройства();

    НовВз.Действие="android.intent.action.SEND"; 

    Сообщить(НовВз.Запустить(Истина));

КонецПроцедуры
...Показать Скрыть

?
Что вам в ответ приходит?
Ответили: (21)
# Ответить
21. CyberCerber 07.10.2014 20:54
(20) DitriX, да, именно так и делаю. В ответ приходит 0. И больше ничего не происходит.
Ответили: (22)
# Ответить
22. DitriX 07.10.2014 21:43
(21) CyberCerber, Даже не знаю что ответить. Это стандартная функция андроида.
Давайте тогда уточним все:
1. Версия андроид
2. Версия 1С
3. Название устройство
4. На скольки устройствах тестировали
5. Вы точно именно так писали? С учетом регистров и без своих каких-либо добавлений? На всякий случай скопируйте этот код и проверьте еще раз. Дабы был чистый эксперимент.
Ответили: (23) (24)
# Ответить
23. CyberCerber 08.10.2014 08:15
(22) DitriX, по пунктам:
1. Андроид 4.0.4
2. 1С 8.3.5.1146
3. Huawei MediaPad 10 FHD
4. Пока на одном
5. Писал именно так, сто раз перепроверял, копировал из Манифеста.

Конечно, ус-во - китайщина, но разве может железо повлиять на работу этих механизмом. Тем не менее, постараюсь сегодня проверить на других девайсах.
# Ответить
24. CyberCerber 08.10.2014 10:45
(22) DitriX, протестил на Samsung Galaxy S3 Android 4.3 - тоже самое

Но у меня получилось по-другому! Добавил строчку из примера НовВз.Тип="message/rfc822";
Открылся выбор Gmail и Bluetooth. Почему так, не можете подсказать? И откуда брать эту инфу о типе?
Ответили: (25)
# Ответить
25. DitriX 08.10.2014 13:26
(24) интересует версия мобильной 1С, а не стационарной.
Так как там они немного переделали механизмы. Вообщем попробуйте из новых примеров в конце статьи.
Ответили: (26)
# Ответить
26. CyberCerber 10.10.2014 09:22
(25) DitriX, мобильная 8.3.5.74. Это уже старая версия?
О, спасибо за примеры. В общем, понял, что нужно изучать Манифесты приложений.
А никто не пробовал открыть из 1С картинку на редактирование, сделать там какие-то пометки и закрыть, сохранив? Не могу найти удобные редакторы/рисовалки, которые с Интентами работают.
# Ответить
27. mzelensky 15.10.2014 10:20
Доброго времени суток!

Делаю фотку средствами 1С, сохраняю в базу и привязываю к нужному объекту. По сути встроенным и средствами все работает, но фотографии получаются довольно большие (мне бы хватило разрешения 800*600).

Можно ли это реализовать вашим методом?.
Ответили: (29)
# Ответить
28. Широкий 15.10.2014 10:34
А можно ли сторонними программа вызывать/скрывать клавиатуру?
Я как то копал - пришел к выводу, что нельзя.
Но на всякий случай спрошу - вдруг ошибаюсь.
Ответили: (29)
# Ответить
29. DitriX 15.10.2014 13:51
(27) а почему нет? Вы вызываете приложения для работы с фото (не 1С), задаете там размеры и фоткаете, в 1С приходит фото.
Если надо обрезать уже сделанное фото - тоже можно.
Пробуйте, а там увидите.

(28) теоретически можно, но такую программу надо самому писать. Врядли вы найдете готовое решение.
# Ответить
30. DanilaDru 16.10.2014 08:08
Коллеги подскажите пожалуйста. В основном по nfc пишут про необходимость перехвата, но 1с этого не умеет. Может встречали приложение, с помощью которого можно было бы перехватить nfc метку? На подобии как автор вызывает стороннее приложение для сканирования штрих-кодов.
# Ответить
31. dj_serega 20.10.2014 17:49
А как можно запаковать в архив каталог?

Интерактивно делается так: Мои файлы - выбираем файл или каталог - меню - Заархивировать.
Ответили: (32)
# Ответить
32. DitriX 20.10.2014 18:28
(31) это вы сейчас о чем?
Ответили: (33)
# Ответить
33. dj_serega 21.10.2014 13:05
(32) DitriX,
Собственно проблемы следующие:
1. Хочу с мобильного приложения создать десяток xml-ек. Запаковать в zip. Отправить по почте.

2. Хочу подключиться к ftp, передать туда десяток файлов или если получится запаковать в архив то передать архив.

Ни первое ни второе не работает.

upd: в тонком клиенте файлы на фтп передаются (в т.ч. каталоги создаются). А вот с мобильного лажа ;(
upd2: Код следующий:
СоздатьКаталог("ftp://login:pass@ip/ИмяКаталога/");

Ошибка следующая:
Каталог не знайдено 'ftp://login:pass/ip/ИмяКаталога': Помилка роботи з інтернет: ftp://ipRequest must not be null.

Я уже и / и \ пробовал. Толку ноль. Ошибка одна и та же.
Ответили: (34)
# Ответить
34. DitriX 21.10.2014 17:04
(33) dj_serega,
FTPСоединение (FTPConnection)

Описание:

Предназначен для работы с файлами и каталогами на ftp-серверах.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.
Ответили: (35)
# Ответить
35. dj_serega 22.10.2014 15:14
(34) DitriX, Так вот именно. Что Новый FTPСоединие не работает на мобильном.
Я подключался по пути "СоздатьКаталог("ftp://login:pass@ip/ИмяКаталога/");"
Думал нет объекта но подключиться можно.

А как на счет вызова программы которая запакует несколько файлов?
Ответили: (36)
# Ответить
36. DitriX 22.10.2014 17:33
(35) хм, ну продолжайте копать :) Авось чего интересного найдете :)
# Ответить
37. CyberCerber 19.11.2014 10:36
Не подскажите, а может ли 1С отправлять broadcast команды?
В Манифесте приложения есть секция activity с intent-filter. Вот действия оттуда срабатывают.
А вот отправляю команду, которая находится в секции receiver с intent-filter - ничего не происходит.
Если через adb shell отправляю команду "am broadcast -a <описание.команды>", то все работает.
Получается, 1С этого еще не умеет?
Ответили: (38)
# Ответить
38. DitriX 19.11.2014 14:26
(37) не может, только стартануть активити может, и принимать бродкасты - тоже пока не умеет.
Ответили: (39)
# Ответить
39. CyberCerber 20.11.2014 08:20
(38) DitriX, ясно, значит, будем надеяться на новую версию платформы...
О, вижу, вы выложили разработку Acode tools! Как я понимаю, через нее можно реализовать и это.
# Ответить
40. arisha_rein (файл скачал) 21.11.2014 22:42
Подскажите, пожалуйста, почему ХЗ = Новый ХранилищеЗначения(Новый ДвоичныеДанные("file:///sdcard/Download/FotoTestFrom1C.bmp")); вызывает ошибку недопустимое значение параметра 1?
Ответили: (41)
# Ответить
41. DitriX 22.11.2014 13:32
(40) потому что:
file:///sdcard/Download/FotoTestFrom1C.bmp - это URI
/sdcard/Download/FotoTestFrom1C.bmp - а это просто путь или path.

uri - Universal resource Identifier.
Эта штука включает в себя:
- схему доступа
- путь к элементу
- идентификатор элемента
т.е. например к записи в БД ты можешь создать uri.
Типичный URI:
jdbc:mysql://localhost/niflheim?useUnicode=true&characterEncoding=utf-8
А path это путь к объекту файловой системы.

Андроид обычно работает с uri, так как он должен понимать - вы указали путь к файлу, или это путь к записи в бд.

Если привести анологию в 1С, то в 1С есть такая фишка, как ссылка на объект.
К примеру:
e1cib/data/Справочник.Пользователи?ref=8259005056c0000811e4723249a21e41 - это путь к элементу справочника, в котором указывается, что это конкретно справочник, и не просто справочник, а вполне определенный справочник, или в андроиде - это URI

С другой стороны:
8259005056c0000811e4723249a21e41 - это просто ID, или в андроиде - path.

Вы если хотите обратиться к элементу, вы не можете просто взять указать ID и получить объект, вам надо указать - что это за объект.

Вот тут тоже самое. Т.е. когда вы делаете запись фото - вы должны указать для андроида uri, тогда он поймет, что это файл и где он лежит.
С другой стороны, когда вы получаете файл из 1С, то 1С уже и сама знает, что работать вы будете только с файлом и все.
Поэтому ей достаточно указать просто путь, а вот уже сама 1С, внутри своей системы - по этому пути получит uri и будет с ним работать.

Надеюсь я понятно объяснил?
Ответили: (42)
+ 1 [ Vedich; ]
# Ответить
42. arisha_rein (файл скачал) 22.11.2014 15:30
(41) DitriX, все понятно. Большое спасибо!
# Ответить
43. ignorant 25.11.2014 15:40
Автору - огромное спасибо, выдает "нагора" массу полезной информации!
Кандидат в "Фабрику знаний" - вкл / выкл приемник GPS

// GPS On
Запуск = Новый ЗапускПриложенияМобильногоУстройства();
Запуск.Действие = "android.location.GPS_ENABLED_CHANGEPICK";
Запуск.Данные 	= "enabled:true";
Запуск.Запустить(Истина);

// GPS Off
Запуск = Новый ЗапускПриложенияМобильногоУстройства();
Запуск.Действие = "android.location.GPS_ENABLED_CHANGEPICK";
Запуск.Данные 	= "enabled:false";
Запуск.Запустить(Истина);
...Показать Скрыть
+ 3 [ mojo.aka; dablack; DitriX; ]
# Ответить
44. gigapevt 27.11.2014 18:31
А как скрыть экранную клавиатуру после окончания ввода текста (например в своей форме поиска).

Код есть, но как его прикрутить к 1С ?

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
Ответили: (45)
# Ответить
45. DitriX 27.11.2014 20:39
(44) без исходников 1с - никак. Во всяком случае - мы не смогли этого добиться.
Еще один из вариантов - своя клавиатура. Вот у нас в ТСД своя клавиатура, и мы ее можем скрывать, открывать и вообще че хотим то и делаем :)
# Ответить
46. ssa 04.02.2015 01:05
Большое спасибо за пример с "android.media.action.IMAGE_CAPTURE". Пригодилось.
Но есть проблема с размером картинки. У меня приложение "Камера", которое автоматически вызывается, позволяет установить минимальное разрешение 1 Мпикс. И файл изображения получается большой. Как его можно уменьшить?
Ответили: (47)
# Ответить
47. DitriX 04.02.2015 12:36
(46) автоматически вызывается из 1с? Ну так вызовите свое приложение камеры. Я вот это люблю https://play.google.com/store/apps/details?id=fr.xplod.focal&hl=ru
+ 1 [ 1cWin; ]
# Ответить
48. ssa 04.02.2015 13:24
Спасибо. Но если я установлю еще одно приложение камеры, как указать, чтобы использовалось именно оно? Ведь может быть несколько подобных приложений на моб. устройстве.
Ответили: (49)
# Ответить
49. DitriX 04.02.2015 13:53
(48) смотрите вот этот кусок в этой публикации "Как сделать фото (видео) в любом качестве?"
И при запуске - у вас будет вопрос - что выбрать. Выберите камеру и скажете что бы выбиралось всегда по умолчанию.
Либо можно доп параметрами указать конкретное приложение, как это сделать - указано в статье
+ 1 [ kingartos; ]
# Ответить
50. ssa 04.02.2015 14:11
Понял, спасибо за разъяснение.
# Ответить
51. kingartos 08.02.2015 21:17
Всем привет! Никто не пробовал работать с "распознователем речи"? Нашел статейку на эту тему(http://stackoverflow.com/questions/6316937/how-can-i-use-speech-recognition-without-the-annoying-dialog-in-android-phones) только у меня ничего не выходит (видимо потому что в этом неразбираюсь) может кто то уже пробовал если да до выложите плиз кусочек кода))
# Ответить
52. solarisman 04.03.2015 17:10
Подскажите, как сделать таким образом, чтобы при открытии формы курсор сразу вставал на поле, чтобы сканирование выполнялось в поле ввода? Приходится "тапать" на поле, после чего выполнять сканирование.
Нельзя ли, например, поставить стороннюю клавиатуру и вызвать событие "Enter" или "Tab"?
Ответили: (53)
# Ответить
53. DitriX 05.03.2015 18:14
(52) баг платформы, увы, эта опция доступно только в 8.3.4.17, во всех остальных - не работает. А вам с какой целью?
# Ответить
54. solarisman 07.04.2015 20:28
Каким образом можно мобильное приложение развернуть на весь экран? Толком так и не разобрался, но тут написано, что для API 16 и выше работает только метод
View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
// Remember that you should never show the action bar if the
// status bar is hidden, so hide that too if necessary.
ActionBar actionBar = getActionBar();
actionBar.hide();
...Показать Скрыть


Можно ли этот код выполнить из 1С?
Ответили: (55)
# Ответить
55. DitriX 09.04.2015 11:48
(54) не туда копаете, правьте манифест и там указывайте что хотите, только это нарушает лицензию 1с :)
Ответили: (56)
# Ответить
56. solarisman 09.04.2015 18:01
(55) Было бы все так просто. Правка манифеста - не панацея. Опробовали на разных устройствах, и в зависимости от параметров экрана снизу остается полоса высотой до 100 пикселей. На смартфонах от 3,5 до 4" работает норм. На смарте 5" остается совсем небольшая полоса снизу, почти незаметная, а вот на ТСД - бидапичаль. Причем после закрытия окон в этой полосе отображается шапка окна (глюк?)
В приложении это видно. При правке манифеста единственное, что меняется - скрывается статусбар
Ответили: (57)

Прикрепленные файлы:

Screenshot_2015-04-09-18-52-10.png
Screenshot_2015-04-09-18-51-48.png
# Ответить
57. DitriX 09.04.2015 19:37
(56) ну это таки глюк, на партнерке о нем вроде как говорили, а вообще отправьте в 1с инфу, зарегят и исправят.
# Ответить
58. DeniNikitin (файл скачал) 20.05.2015 16:41
Здравствуйте!

Ну а где сама утилита для реализации кода?

Процедура ПроверитьВзаимодействие(Команда)
    НовВз=Новый ЗапускПриложенияМобильногоУстройства();
    НовВз.Действие="com.ditrix.ownaction.SHOW_TOAST"
    НовВз.ДополнительныеДанные.Добавить("com.ditrix.ownaction.EXTRAS_MESSAGE","Данные");

    Сообщить(НовВз.Запустить(Истина));

    Для Каждого Стр ИзНовВз.ДополнительныеДанные Цикл
        Сообщить(Стр.Ключ+" - "+Стр.Значение);
    КонецЦикла;
КонецПроцедуры
...Показать Скрыть


Это для простого сообщения, а вот это действие для пуша:

"com.ditrix.ownaction.SHOW_NOTIFICATION"
При этом вам вернется ответ в виде 3 данных разных типов.
Ответили: (59)
# Ответить
59. DitriX 20.05.2015 20:26
(58) во вложении к статье :)
# Ответить
60. DeniNikitin (файл скачал) 21.05.2015 17:58
Я не много не понял скачал apk, установил, прописал Ваш код по отправке push и toast, в итоге не получил ни push ни toast сообщений, расскажите как использовать?
Ответили: (61)
# Ответить
61. DeniNikitin (файл скачал) 21.05.2015 18:01
(60) DeniNikitin,
Извиняюсь просмотрел всё работает корректно!
# Ответить
62. DeniNikitin (файл скачал) 21.05.2015 18:07
А никак нельзя иконку и текст "Notification" заменить?
Ответили: (63)
# Ответить
63. DitriX 21.05.2015 18:19
(62) увы, это ограничения Андроида, можно выставлять только те иконки, которые находятся в ассетах приложения, т.е. при компиляции.
Ответили: (64) (66)
# Ответить
64. DeniNikitin (файл скачал) 22.05.2015 05:37
(63) DitriX,
Если я правильно понял скачиваю ваши исходники меняю там иконку компилирую и будет другая иконка?
Ответили: (65)
# Ответить
65. DitriX 22.05.2015 12:14
(64) ну если именно заменить, то да, а если добавить еще одну, то надо код дописывать.
# Ответить
66. DeniNikitin (файл скачал) 26.05.2015 12:57
(63) DitriX,
Подскажи в какой среде разработки написан проект? Какой IDE использовал?
Ответили: (67)
# Ответить
67. DitriX 26.05.2015 13:39
(66) не помню, или идея или эклипс
# Ответить
68. DeniNikitin (файл скачал) 27.05.2015 16:44
Здравствуйте!

А есть пример, что сделать с этой штукой:
НовВз = Новый ЗапускПриложенияМобильногоУстройства();
    НовВз.Действие = "android.intent.action.GET_CONTENT";
?
Ответили: (69)
# Ответить
69. DeniNikitin (файл скачал) 27.05.2015 17:08
(68) DeniNikitin,
Что возвращает, как вытащить расширение и.т.д.?
# Ответить
70. DeniNikitin (файл скачал) 27.05.2015 17:17
Приношу извинения пример есть:
НовВз = Новый ЗапускПриложенияМобильногоУстройства();
НовВз.Действие = "android.intent.action.GET_CONTENT";
//Указываем тип искомых файлов, нас интересует только фото
НовВз.Тип = "image/*"; //"file/*"; //"*/*"
//Говорим что интересуют только локальные данные, а не облачные
НовВз.ДополнительныеДанные.Добавить("android.intent.extra.LOCAL_ONLY",Истина);
РезультатРаботы = НовВз.Запустить(Истина);
Если НЕ РезультатРаботы Тогда
    Сообщить("Файл не выбран!");
    Возврат
КонецЕсли;
ПутьКФайлу = НовВз.Данные;
...Показать Скрыть

Но я понимаю он возвращает uri, а как из него получить двоичные данные? Если можно пример?
Ответили: (71)
# Ответить
71. DitriX 28.05.2015 10:06
(70) URI - это путь к файлу, а как из файла вытащить двиочные данные - точно так же как и в стационарной, и читайте камменты, тут был пример с картинкой
Ответили: (72) (73)
# Ответить
72. DeniNikitin (файл скачал) 28.05.2015 11:24
(71) DitriX,
Если URI - Путь к файлу, тогда должно работать

ДвоичныеДанные = Новый ДвоичныеДанные(НовВз.Данные); 

Но не работает пишет "Недопустимое значение параметра №1"

Попробовал:
	  	Картинка = Новый Картинка(НовВз.Данные);
	  	СтрокаПуть = Картинка.ПолучитьДвоичныеДанные();

Выдаёт Файл не обнаружен "file://content://external/images/media/10466"

В примерах посмотрел с картинкой примера нет, если только не прописывать строкой ФайлКартинки = "file:///sdcard/Download/FotoTestFrom1C.bmp";

Подскажите куда копать?
# Ответить
73. DeniNikitin (файл скачал) 28.05.2015 13:01
(71) DitriX, И ещё заметил такую вещь, что после выбора картинки мне возвращается строка "content://external/images/media/10466", а по факту в total commander смотрю там файл img_.....jpg? Точно путь возвращается в Данные?
Ответили: (74)
# Ответить
74. DitriX 28.05.2015 13:05
(73) верн. Так вы выюираете через последние данные. Хотите так выбирать, тогда надо выпрямить ссылку. Читайте в другой статье про утилиты
Ответили: (75)
# Ответить
75. DeniNikitin (файл скачал) 28.05.2015 13:10
(74) DitriX,
А ссылку на статью можно?
Ответили: (77)
# Ответить
76. DeniNikitin (файл скачал) 28.05.2015 13:40
Нашёл пример на яве
if(resultCode==RESULT_OK){
String FilePath = data.getData().getPath();
textFile.setText(FilePath);
}
А ни как нельзя этот getPath() в каких-нибудь свойствах ЗапускПриложенияМобильногоУстройства тоже прикрутить?
Ответили: (77)
# Ответить
77. DitriX 28.05.2015 15:24
(75)http://infostart.ru/public/310565/
(76) нет. Во всяком случае - я не знаю как это сделать из 1с
# Ответить
78. DeniNikitin (файл скачал) 28.05.2015 16:59
Спасибо! Использовал функцию ПолучитьUriИзContent(Путь) и всё как надо!
# Ответить
79. DeniNikitin (файл скачал) 28.05.2015 17:10
Вопросит по фото из 1С

		ФайлКартинки = "file:///sdcard/DCIM/FotoTestFrom1C.jpg";
		НовВз = Новый ЗапускПриложенияМобильногоУстройства("android.media.action.IMAGE_CAPTURE");
		НовВз.ДополнительныеДанные.Добавить("output",ФайлКартинки,"Uri");
		НовВз.Запустить(Истина);

...Показать Скрыть

Чтобы он в галерее отображался? А то у меня физически есть а в галереи нету?
Ответили: (80)
# Ответить
80. DitriX 28.05.2015 17:48
(79) не понял вопрос, можете уточнить?
Ответили: (81)
# Ответить
81. DeniNikitin (файл скачал) 28.05.2015 20:51
(80) DitriX,
Смысл в следующем, код работает и файл сохраняет, но при этом захожу в галерею андроида, его там нет! Через total commander - есть! Вы в андроиде больше понимаете, скорей всего есть какой-то параметр, который надо подключить, чтобы в галерее отображался!
Ответили: (82)
# Ответить
82. DitriX 28.05.2015 20:56
(81) ну для начала путь укажите верный: file:///sdcard/DCIM/Camera/FotoTestFrom1C.jpg
Ответили: (83)
# Ответить
83. DeniNikitin (файл скачал) 29.05.2015 06:19
(82) DitriX, Дело не в пути, я галерею открываю и у меня там по папкам фото отображается и в том числе есть папка DCIM, и которые файлы там лежат они отображаются кроме того, что сфотал интентом!
Ответили: (84)
# Ответить
84. DitriX 29.05.2015 10:09
(83) очень интересно. Может расширение файла не совпадает с его реальным типом?
Тут я затрудняюсь ответить. У меня галерея подхватывает все. Так что тут скорее всего вопросы именно в вашей галерее.
# Ответить
85. Andrey_R91 23.07.2015 15:52
Подскажите, как можно открыть html-файл через браузер? Какой MIME-тип нужно указывать чтобы запустился браузер? Или само название приложения (к примеру "com.google.android.gm")
Ответили: (86)
# Ответить
86. DitriX 23.07.2015 16:56
(85) так вы же сами ответили.
берите за пример открытие контакта в вибере
Ответили: (90)
# Ответить
87. zwitter 27.07.2015 08:28
79. А диктофон встроенный никто не пробовал запускать?
а то метод СделатьАудиозапись меня не совсем устраивает.
# Ответить
88. zwitter 27.07.2015 17:49
НП = Новый ЗапускПриложенияМобильногоУстройства("android.provider.MediaStore.RECORD_SOUND");
# Ответить
89. enot_tut 27.07.2015 18:45
помогите исправить при загрузке фотографий из телефона фотка не отоброаеться а при добовление с компа все норм
&НаКлиенте
Процедура ДобавитьКартинку(Команда)
ИмяФайла = "";
ПутьФайла = "";
//Вызываем Диалоговое окно и помещаем файл Картинки из локальной файловой системы во временное хранилище
Если ПоместитьФайл(ПутьФайла, , ИмяФайла, Истина) = Истина Тогда
 
//в строковый реквизит ФОТО нашей формы сохраняем ссылку на Картинку во временном хранилище
Фото = ПутьФайла;
//для создания нового элемента в Справочнике Файлы и записи Картинки в его реквизит Файл
//переходим на сервер с помощью вызова серверной процедуры
УстановитьКартинку();
КонецЕсли; 
//условие ЕСЛИ нужно для того, чтобы если пользователь отказался от выбора файла
//мы не вызывали серверную процедуру УстановитьКартинку()

    #Если МобильноеПриложениеКлиент Тогда
	НовВз = Новый ЗапускПриложенияМобильногоУстройства();
    НовВз.Действие = "android.intent.action.GET_CONTENT";
//Указываем тип искомых файлов, нас интересует только фото
    НовВз.Тип = "image/*"; //"file/*"; //"*/*"
//Говорим что интересуют только локальные данные, а не облачные
    НовВз.ДополнительныеДанные.Добавить("android.intent.extra.LOCAL_ONLY",Истина);
    РезультатРаботы = НовВз.Запустить(Истина);
    Если НЕ РезультатРаботы Тогда
        Сообщить("Файл не выбран!");
    Возврат
    КонецЕсли;
    ПутьКФайлу = НовВз.Данные;
    Если ПоместитьФайл("что вписать сюда?", , Истина) = Истина Тогда
  Фото = "что вписать сюда?";
УстановитьКартинку();
КонецЕсли; 
    #КонецЕсли
КонецПроцедуры

&НаСервере
Процедура УстановитьКартинку()
//создаем новый элемент в Справочнике Файлы
НовыйФайлКартинки = Справочники.Файлы.СоздатьЭлемент();
//в реквизит СправочникаФайлы Файл помещаем выбранную ранее Картинку
НовыйФайлКартинки.Файл = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Фото));
Фото = ПоместитьВоВременноеХранилище(НовыйФайлКартинки.Файл.Получить());
//записываем новый элемент справочника Файлы
НовыйФайлКартинки.Записать();

//устанавливаем значение реквизита Картинка Справочника Сотрудники
Объект.Картинка = НовыйФайлКартинки.Ссылка;
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//отображение картинки при открытии формы справочника
Фото = ПолучитьНавигационнуюСсылку(Объект.Картинка, "Файл");

//устанавливаем автомасштаб для картинки
Элементы.Фото.РазмерКартинки = РазмерКартинки.АвтоРазмер;
КонецПроцедуры
...Показать Скрыть
Ответили: (91) (97)
# Ответить
90. enot_tut 27.07.2015 20:19
(86) DitriX, помоги пожалуйста
# Ответить
91. DitriX 27.07.2015 21:54
(89) я не понял из кода - что он делает, и не понял - в чем проблема.
Напишите внятно :) Вам проблема понятна, а мне нет.

По пунктам.
1. Не отображается где? В самой форме?
2. Какие значения в переменных? Например, какой путь у фото получается. Прочитайте в этой же статье 70 комментарий и ниже.
3. Что значит при добавлении компа? Вы фото синхронизируете? Или что?

Идеальный вариант - дайте просто обработку, в которой четко понятно, что вы хотите сделать, и что не получается.
Ответили: (92)
# Ответить
92. enot_tut 27.07.2015 23:24
(91) DitriX, при добавление с компьютера
фотография добавляться на мобильном устройств а также на компьютере,
а при добавление с мобильного устройства фотка не где не отоброжаеться

Прикрепленные файлы:

2015-07-27 10-59-35 Контроль расходов.png
2015-07-27 23-22-38 BlueStacks App Player.png
# Ответить
93. djvu 30.09.2015 14:40
(7) DitriX,

Как я понял, запускать можно только активити с параметрами? Сервисы таким образом запускать нельзя?
Ответили: (94)
# Ответить
94. DitriX 30.09.2015 17:22
(93) вы вызываете намерение, у сервисов их нет, т.е. вы и активити то не все вызвать можете, а только те, у которых есть фильтр намерений.
Ответили: (95)
# Ответить
95. djvu 01.10.2015 08:26
(94)
Т.е. для организации двухстороннего обмена с сервисом с использованием интентов нужна активити-прослойка в любом случае :/
Получается и асинхронный режим выпадает?
Ответили: (96)
# Ответить
96. DitriX 02.10.2015 11:25
(95) djvu, во всяком случае - на текущий момент, да.
Но как научимся слушать бродкасты...
Ответили: (98)
# Ответить
97. Silmariil 04.11.2015 13:36
(89) enot_tut, Вопрос хороший, сам сейчас на него сейчас ищу ответ. По сути нет метода в 1С, который бы позволил преобразовывать file в uri и обратно. в самом Android данный метод есть Uri.parse()

Есть обходное решение: вызвать после выбора файла crop, но это лишнее действие + например на sony compact z3 не пашет, на asus пашет.
# Ответить
98. enot_tut 18.11.2015 10:04
(96) DitriX, можно конфигурацию скинуть этой статьи
Ответили: (99)
# Ответить
99. DitriX 21.11.2015 20:28
(98) enot_tut, держите

Прикрепленные файлы:

OwnAction-debug-unaligned.apk
ActionProject.zip
# Ответить
100. bookmanyak 27.11.2015 23:39
Всем доброго времени суток!
Прошу прощения, а как, на подобии описанного в статье примера, сделать массовое (непрерывное) сканирование?
Заранее благодарен.
Ответили: (101)
# Ответить
101. DitriX 28.11.2015 13:31
(100) никак :) Ну только если не взять исходники приложения и не дописать это самому.
# Ответить
102. mevgenym 21.12.2015 15:41
Делал отправку сообщения конткретному контакту в скайп.

ориентировался по ссылкам:
https://msdn.microsoft.com/en-us/library/dn745884.aspx
https://msdn.microsoft.com/en-us/library/dn745882.aspx#chats

Вот так получилость открыть чат с контактом:

НовВз.Действие = "android.intent.action.VIEW";
НовВз.Данные =  "skype:"+ИМЯКОНТАКТА+"?chat";
НовВз.Приложение = "com.skype.raider";
НовВз.ИмяКласса = "com.skype.raider.Main";


Потом, делал так:

НовВз.Действие = "android.intent.action.SEND";
НовВз.Данные =  "skype:"+ИМЯКОНТАКТА+"?chat";
НовВз.Приложение = "com.skype.raider";
НовВз.ИмяКласса = "com.skype.raider.Main";
НовВз.ДополнительныеДанные.Добавить("android.intent.extra.TEXT", Сообщение);
...Показать Скрыть


но попадаю на выбор контактов, хотя после выбора сообщение сразу отправляется.
Ответили: (103)
# Ответить
103. koks17v 10.01.2016 00:19
(102) mevgenym,
Тоже самое и с вибером.
Кто-нить в курсе - можно эмулировать нажатие кнопки Отправить?
Ответили: (104)
# Ответить
104. dablack 16.01.2016 22:35
(103) koks17v, Присоединяюсь к вопросу. Все, что предложила Снежана отлично, но нужна отправка сообщения определенному контакту без выбора.
# Ответить
105. DitriX 20.01.2016 12:28
Увы, этого не поддерживают стандартные месенджеры, это своеобразная защита от создания спам ботов. Ну и от вирусов, что бы не было такого, что вы поставили игру, а она потом всем вашим контактам разослала вирусы.
Хотя, неисключенно, что через одно место сделать можно.
# Ответить
106. mulder242 31.03.2016 14:57
Вопрос, можно ли выбрать контакты для отправки сообщений Viber не из книги контактов, а из запроса к базе ? (рассылка по справочнику контрагенты) ?
# Ответить
107. DitriX 02.04.2016 19:22
не думаю, иначе бы все клепали кучу ботов
# Ответить
108. ISP 05.07.2016 16:06
Не получается сделать фото через камеру. Смартфон Megafon Login 2

Окно для фотографирования появляется, делаешь снимок. Преходит на следующие окно с крестиком и галкой (в стандартной камере этого экрана нет). Нажимаешь на галку и ничего не происходит.
Будто не получает событие завершения снимка. Но фотографии в галерии видны.
Если нажать на крестик, то выдает ошибку "Файл не обнаружен". Интересно, что пишет "file" 2 раза. Первый раз через "//", а второй "///"

Что означают "///"?.
Ответили: (109)
# Ответить
109. DitriX 05.07.2016 23:14
(108) ISP, вы ответили на свой вопрос, значит ваша камера контекст подставляет сама, пробуйте вообще без file://
# Ответить
110. ISP 06.07.2016 13:47
у меня заработал такой вызов камеры android/ Сделано на базе примера, за что спасибо
//Тут указываем путь, при чем путь должен быть доступен всем программам,
		// так что временные файлы 1С не подйут
		
		ФайлКартинки = КаталогДокументов()+"MobileFoto.jpg";
		// без замены слешей не сохраняет нормально
		ФайлКартинки = СтрЗаменить(ФайлКартинки,"\","/");
		// делаем как бы ссылку на файл для андроида
		ФайлКартинки = "file://" + ФайлКартинки; 
		
		НовВз = Новый ЗапускПриложенияМобильногоУстройства("android.media.action.IMAGE_CAPTURE");
		
		//Обязательно указываем этот параметр, если его не указать,
		// тогда вам вернется привью файла в низком качестве
		// и находится он будет в параметрах с ключем data.
		НовВз.ДополнительныеДанные.Добавить("output",ФайлКартинки,"Uri");
		
		//Если фото не сделано, то ответ будет "0"
		Рез = НовВз.Запустить(Истина);
		
		// а тут нормально обращение к файлу. Без этого вылетает ошибка, что файл не обнаружен 
		ФайлКартинки = СтрЗаменить(ФайлКартинки,"file://","");
		
		// сохраняем в справочник на смартфоне, для последующей выгрузки
		Фото_СохранитьСнимок(Неопределено,
		Новый ДвоичныеДанные(ФайлКартинки),
		Неопределено,
		Неопределено
		);

&НаСервере
Процедура Фото_СохранитьСнимок(ФотоСсылка,ДвоичныеДанные,РасширениеФайла,ТипСодержимого)
	Если ФотоСсылка = Неопределено Тогда 
		Фото = Справочники.ФотоДляСлужебок.СоздатьЭлемент();
		Фото.Наименование = Формат(ТекущаяДата(),"ДФ='yyyy.MM.dd HHmmss'") + "[Нов. фото]";
		Фото.ИмяФото = Формат(ТекущаяДата(),"ДФ='yyyy.MM.dd HHmmss'") + ".jpg";
	иначе	
		Фото = ФотоСсылка.ПолучитьОбъект();
	КонецЕсли;
	
	Фото.ДатаФото = ТекущаяДата();
	Фото.РасширениеФото = РасширениеФайла;
	Фото.ТипСодержимогоТекст = ТипСодержимого;
	// для отлаки
	Если ДвоичныеДанные = Неопределено Тогда 
		Фото.ХранилищеФото = Новый ХранилищеЗначения(Неопределено);
	иначе	
		Фото.ХранилищеФото = Новый ХранилищеЗначения(ДвоичныеДанные,Новый СжатиеДанных(9));
	КонецЕсли;
	Фото.ЕстьФото = Истина;	
	Фото.Родитель = Фото_ТекущаяСлужебка;
	Фото.Записать();
КонецПроцедуры
...Показать Скрыть
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл