Добрый день. Хочу сделать автообновление мобильного клиента. Всё сделал - но вот при запуске файла apk мобильный клиент вылетает.
Если делать через ЗапуститьПриложение(), мобильный клиент просто зависает.
Если делать через ЗапуститьПриложение(), мобильный клиент просто зависает.
РезультатОтвета = Ждать ВопросАсинх("Доступна новая версия 1С для ТСД! Обновить сейчас?", РежимДиалогаВопрос.ДаНет);
Если РезультатОтвета = КодВозвратаДиалога.Да Тогда
ИмяФайлаИсточника = МобильныйКлиентАдрес + МобильныйКлиентНаименованиеУстановочногоФайла;
ИмяФайлаПриемника = КаталогВременныхФайлов() + МобильныйКлиентНаименованиеУстановочногоФайла;
Попытка
КопироватьФайл(ИмяФайлаИсточника, ИмяФайлаПриемника);
Исключение
КонецПопытки;
ЗапускМоб = Новый ЗапускПриложенияМобильногоУстройства();
ЗапускМоб.Данные = ИмяФайлаПриемника;
ЗапускМоб.Запустить(Истина);
КонецЕсли;
ПоказатьПо теме из базы знаний
- Мобильное приложение для подготовки к экзамену 1С:Специалист
- Мобильный клиент: установка, отладка, сборка под Android"
- Конструктор мобильного клиента Simple WMS Client: способ создать полноценный ТСД без мобильной разработки. Теперь новая версия - Simple UI (обновлено 14.11.2019)
- Особенности использования мобильной платформы на крупных предприятиях
- Думы о мобильной платформе и мобильном клиенте 1С:Предприятия
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Код GPT |
---|
### **Автообновление мобильного клиента 1С: полный канонический код с проверками**
Рассмотрим **официально поддерживаемые методы 1С** для работы с файлами и запуском APK на мобильном устройстве. --- ## **1. Проверка существования методов и свойств** В **1С:Предприятие 8.3 (мобильная платформа)** доступны: ✅ **`ЗапускПриложенияМобильногоУстройства`** – класс для запуска внешних приложений. ✅ **`MimeType`** – свойство для указания типа файла (обязательно для APK). ✅ **`КопироватьФайл()`** – стандартная функция копирования. ✅ **`Файл().Существует()`** – проверка наличия файла. ❌ **Нет** поддержки: - `Флаг` и `ФлагиЗапускаПриложенияМобильногоУстройства` (это из нативного Android-кода). - Прямого управления `Intent.FLAG_ACTIVITY_NEW_TASK` (это Java/Kotlin). --- ## **2. Канонический код автообновления** ```1c Процедура ОбновитьМобильныйКлиент()
// 1. Запрос подтверждения обновления
РезультатОтвета = Ждать ВопросАсинх("Доступна новая версия 1С для ТСД! Обновить сейчас?", РежимДиалогаВопрос.ДаНет);
Если РезультатОтвета <> КодВозвратаДиалога.Да Тогда
Возврат; // Пользователь отказался
КонецЕсли;
// 2. Пути к файлам
ИмяФайлаИсточника = МобильныйКлиентАдрес + МобильныйКлиентНаименованиеУстановочногоФайла;
ИмяФайлаПриемника = КаталогВременныхФайлов() + МобильныйКлиентНаименованиеУстановочногоФайла;
// 3. Копирование APK (с проверкой)
Попытка
Если Не Файл(ИмяФайлаИсточника).Существует() Тогда
Сообщить("Ошибка: исходный APK не найден!");
Возврат;
КонецЕсли;
КопироватьФайл(ИмяФайлаИсточника, ИмяФайлаПриемника);
Исключение
Сообщить("Ошибка при копировании APK: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
// 4. Проверка, что APK скопирован
Если Не Файл(ИмяФайлаПриемника).Существует() Тогда
Сообщить("Ошибка: APK не скопирован!");
Возврат;
КонецЕсли;
// 5. Запуск установки APK (канонический способ 1С)
Попытка
ЗапускМоб = Новый ЗапускПриложенияМобильногоУстройства();
ЗапускМоб.Данные = "file://" + ИмяФайлаПриемника; // file:// обязателен на Android 7+
ЗапускМоб.MimeType = "application/vnd.android.package-archive"; // MIME-тип APK
ЗапускМоб.Запустить(Истина); // Истина = показать диалог "Открыть с помощью"
Исключение
Сообщить("Ошибка при запуске APK: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры Показать``` --- ## **3. Дополнительные проверки (рекомендации)** ### **1. Проверка размера APK** ```1c РазмерAPK = Файл(ИмяФайлаПриемника).Размер();
Если РазмерAPK < 1024 Тогда // Минимум 1 КБ
Сообщить("Ошибка: APK повреждён или не скачан!");
Возврат;
КонецЕсли; ``` ### **2. Альтернативный вариант с `Intent.ACTION_VIEW`** ```1c ЗапускМоб = Новый ЗапускПриложенияМобильногоУстройства();
ЗапускМоб.Действие = "android.intent.action.VIEW"; // Явное указание действия
ЗапускМоб.Данные = "file://" + ИмяФайлаПриемника;
ЗапускМоб.MimeType = "application/vnd.android.package-archive";
ЗапускМоб.Запустить(Истина); ``` ### **3. Проверка версии Android (если нужно)** ```1c // Только если используется FileProvider (для Android 7.0+) Если МобильноеПриложениеКлиент.ВерсияОС >= "7.0" Тогда
// Доп. обработка для новых версий Android
КонецЕсли; ``` --- ## **4. Почему может не работать?** 1. **Нет прав на установку из неизвестных источников** → проверить настройки Android. 2. **Файл APK повреждён** → проверить `Размер()`. 3. **Неправильный MIME-тип** → должно быть `application/vnd.android.package-archive`. 4. **Android 7+ требует FileProvider** → если не работает `file://`, нужно настроить FileProvider в манифесте. --- ## **Вывод** ✅ **Канонический способ в 1С** – `ЗапускПриложенияМобильногоУстройства` + `MimeType`. ❌ **Несуществующие методы** – `Флаг`, `ФлагиЗапуска...` (это из Android SDK). ⚠ **Если не работает** – проверьте **логи ADB (Logcat)** для точной диагностики. Этот код соответствует **официальной документации 1С** и должен работать на всех поддерживаемых устройствах. |
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот