Хобрук: Ваш путь к мастерству в программировании

Остановить перезапуск приложения в ответ на событие USB, когда оно уже находится на переднем плане

События:

1. USB-устройство подключено.

  1. Появляется подсказка: «Открыть appName, когда это USB-устройство подключено?»
  2. Нажмите «Отмена» -> приложение остается открытым | нажми ок -> приложение перезапустится

Требуемое поведение: приложение либо не отображает диалоговое окно и автоматически открывает приложение, когда оно не находится на переднем плане, либо, когда приложение находится на переднем плане, и когда пользователь нажимает "ОК", приложение не перезапускается. .

Попытка решения: я попытался убедиться, что режим запуска каждого действия установлен на "SingleTask". Это решение сработало здесь, но когда я сделал то же самое, приложение все еще перезапускается.

Вопрос в двух словах: как остановить перезапуск приложения, когда пользователь просит открыть приложение при подключении устройства? Или как мне полностью остановить это приглашение, продолжая при этом запускать мое приложение, когда это USB-устройство подключено?

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

Заранее спасибо.


Ответы:


1

приложение использует IntentFilter с диалоговым окном AppChooser или Launcher https://developer.android.com/guide/components/intents-filters.html

это всегда происходит, когда вы используете IntentFilter на android.hardware.usb.action.USB_DEVICE_ATTACHED. Другая возможность заключается в том, что диалоговое окно представляет собой AppChooser или диалоговое окно запуска, которое вызывается при наличии нескольких приложений (или нескольких экземпляров одного и того же/вашего приложения), которые захватывают USB-подключение. событие . Вот почему, когда вы нажимаете Cancel, приложение остается открытым.

Использование фильтра намерений

Чтобы ваше приложение обнаруживало определенное USB-устройство, вы можете указать фильтр намерений для фильтрации намерений android.hardware.usb.action.USB_DEVICE_ATTACHED. Наряду с этим фильтром намерений вам необходимо указать файл ресурсов, в котором указаны свойства USB-устройства, такие как идентификатор продукта и поставщика. Когда пользователи подключают устройство, которое соответствует вашему фильтру устройств, система показывает им диалоговое окно с вопросом, хотят ли они запустить ваше приложение. Если пользователи соглашаются, ваше приложение автоматически получает разрешение на доступ к устройству до тех пор, пока устройство не будет отключено.

https://developer.android.com/guide/topics/connectivity/usb/host.html

это системный диалог, который внутренне связан с событием android.hardware.usb.action.USB_DEVICE_ATTACHED, поэтому отключить его будет сложно. есть возможность использовать <activity-alias>, https://developer.android.com/guide/topics/manifest/activity-alias-element.html вы можете направлять намерения с его помощью:

http://www.stackoverflow.com/questions/40182096/usb-permissions-without-prompt/40182413#40182413

http://blog.danlew.net/2014/01/16/preserve-your-launchers-use-activity-alias/ (Есть ли способ иметь один и только один экземпляр каждого действия?)

19.02.2017
  • Спасибо за ваш ответ. В какой части моего кода вам нужно сказать, как отключить диалог? Диалог автоматически генерируется Android. Вторая ссылка, которую вы предоставили, дает мне в основном то же решение, что и то, которое, как я сказал, я пробовал в своем вопросе (предлагает использовать: SingleInstance & я сказал, что использовал SingleTask), и я думаю, что оба режима не останавливают перезапуск приложения. 20.02.2017
  • публиковать manifest.xml и все, что вы делаете с IntentFilter для USB_DEVICE_ATTACHED 20.02.2017
  • Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..