У меня есть приложение, работающее на планшете Android без имени с ОС ICS 4.0.3, которое управляет USB-устройством через интерфейс режима хоста USB. Файл android.hardware.usb.host.xml находится в / system / etc / permissions, и все прекрасно работает. Кроме...
Когда я запускаю приложение в первый раз после перезагрузки, а затем подключаю USB-устройство, я получаю всплывающее окно с надписью «Разрешить приложению APPNAME доступ к USB-устройству? [] Использовать по умолчанию для этого USB-устройства. Отмена OK» и Я должен нажать ОК, прежде чем он сможет начать использовать устройство.
Мне нужно отключить подтверждение пользователя, чтобы приложение могло сразу же использовать устройство. Как мне это сделать? У меня есть некоторые предложения по использованию генератора нажатий клавиш для имитации нажатия пользователем кнопки на экране, но я предпочел бы избегать такого подхода и настраивать его так, чтобы запрос подтверждения просто не происходил.
Я, вероятно, не могу заставить поставщика сделать собственную сборку ядра для меня, но я смогу получить от них ключ подписи прошивки, чтобы я мог подписать свое приложение как системное приложение, если это поможет.
Одна связанная проблема: установка флажка «Использовать по умолчанию для этого USB-устройства», похоже, не помогает - если я отключу и снова подключу устройство, то я получу запрос подтверждения снова. В этой ситуации я заметил, что номер устройства в / dev / bus / usb / 001 / меняется каждый раз, когда я отключаю и включаю (001, 002, 003 и т. Д.), Что, возможно, объясняет эту конкретную проблему.
источник
Ответы:
Этот вопрос и ответ в основном являются дубликатом
/programming//a/15151075/588476.
См. Ссылку выше для примера программы и более подробное обсуждение.
Насколько я знаю, есть два способа получить всплывающее окно разрешения USB:
В случае 1 я обнаружил, что флажок во всплывающем окне для запоминания разрешения не имеет никакого эффекта.
Для меня я удалил весь код, связанный с разрешениями, из моего программного обеспечения и просто поместил фильтр намерений в свой манифест. Когда USB-устройство подключено, если ему еще не было предоставлено разрешение, появится окно с разрешением USB. Если пользователь нажимает кнопку «ОК», не устанавливая флажок «Запомнить», то при следующем подключении устройства оно снова появится. Однако, если пользователь установит флажок и нажмет OK, то этот флажок больше не должен отображаться (если только программное обеспечение не удалено, а затем установлено заново).
Я не уверен, есть ли где-то ошибка, связанная с тем, что ваше устройство отображается как / dev / bus / usb / 001, а затем 002 и т. Д. - дайте мне знать, если вы используете фильтр намерений, так как без этого флажок запоминания будет ничего не делать.
Я не знаю ни одного способа, чтобы вы могли вообще избежать всплывающего окна с разрешениями. Я подозреваю, что нет способа сделать это, не копаясь в коде Android, как вы сказали.
источник
В дополнение к моему комментарию я изучил основной код Android.
У меня есть возможный ответ, но с не менее чем четырьмя основными оговорками и препятствиями:
Забудьте об этом, если развертываете обычные сторонние приложения!
Первым условием является то, что у вас есть
MANAGE_USB
разрешение. Это описано здесь .Однако, в свою очередь, для этого необходимо, чтобы вы подписали системный ключ и установили свое приложение в / system / app.
В любом случае, если вы согласны с этим, вот код:
mDevice
это устройство из ранее.uid
UID вашего собственного приложения, и вы можете посмотреть его. Примером того, как это сделать, является первый ответ здесь .Все хорошо? Нет
ServiceManager
,android.os.ServiceManager
и, следовательно, не является публичным API. В данном примере это ваш способ получитьIUsbManager
услугу (могут быть и другие маршруты). Теперь обойти это выходит за рамки моего ответа; в старые времена ты мог использовать отражение, но я не знаю, сможешь ли ты все еще.После всех этих махинаций, похоже, вам больше не нужно запрашивать разрешение, и если вы это сделаете, он немедленно вернется без диалога.
источник