Есть ли прослушиватель vpn «забыть»?

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

Есть ли способ сделать это?

0
0
235
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Нет, вы можете использовать Intent prepare = VpnService.prepare(this), если намерение недействительно, то ваша VPN создается в настройках, иначе вызовите startActivityForResult(prepare, REQUEST_VPN), чтобы создать VPN. вы можете использовать нулевую проверку prepare == null, чтобы узнать, создана ли VPN или нет. Надеюсь, это поможет вам.

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

AyTee 28.03.2019 10:33
Ответ принят как подходящий

При проверке исходного кода VpnSettings#удалитьпрофиль() - ничего не транслируется.

Единственным доступным обратным вызовом является VpnService#onRevoke(); как указано в документации:

Invoked when the application is revoked. At this moment, the VPN interface is already deactivated by the system. The application should close the file descriptor and shut down gracefully. The default implementation of this method is calling Service#stopSelf().

Я полагаю, что исходный код является ответом на мой вопрос. Спасибо!

AyTee 28.03.2019 10:51

@avielt10 на стандартном ПЗУ, это кажется недосягаемым, но эти профили на самом деле хранятся в /misc/vpn/profiles, где можно использовать FileObserver для отслеживания событий DELETE или DELETE_SELF. VpnSettings — это редактор файлов в этом каталоге.

Martin Zeitler 28.03.2019 11:00

если VpnService не запущен, нам не позвонят onRevoke()

Akshay Kumar S 28.03.2019 11:09

@MartinZeitler я вижу ... так что на нерутированном устройстве, если мое приложение является владельцем устройства, могу ли я попасть в этот каталог?

AyTee 28.03.2019 11:19

@avielt10 Вы получите уведомление, когда из этого каталога будет удалена какая-либо VPN, а не только ваша собственная VPN.

Akshay Kumar S 28.03.2019 11:40

@AkshayKumarS Думаю, его можно отфильтровать по имени. Вы знаете, есть ли у меня доступ к этому пути как у владельца устройства?

AyTee 28.03.2019 12:02

@avielt10 можно наблюдать каталоги (которые вызывают событие DELETE), а также отдельные файлы (которые вызывают событие DELETE_SELF). на пользовательском ПЗУ однажды можно было даже транслировать пользовательское событие при удалении профиля. на самом деле, путь /data/misc/vpn/profiles. изменение меток SE Linux может потребоваться даже при наличии разрешений root. ls -Z /data/misc/vpn/profiles перечисляет контекст безопасности.

Martin Zeitler 28.03.2019 12:09

@MartinZeitler попробовал AVD, и ls -a /data/misc/vpn на выходе . .., кажется, что /data/misc/vpn/profiles не существует, хотя на устройстве есть 3 профиля VPN.

AyTee 28.03.2019 12:57

@avielt10 Я написал -Z, а не -a ... и этот путь жестко запрограммирован в исходном коде, который там четко читается и пишется. при использовании учетной записи пользователя и контекста, который может не указывать каталог, он не будет отображать каталог. только журнал аудита может показать отказ. SE Linux императивен и требует соответствующего контекста безопасности, что бы ни случилось; по крайней мере с Android 5.0.

Martin Zeitler 28.03.2019 13:23
mkdir /data/misc/vpn/profiles 0770 system system ...является частью скрипта init.rc, который создает структуру каталогов по умолчанию. что означает, что пользователь или группа system могут получить к нему доступ, независимо от контекста безопасности, что может добавить дополнительные ограничения. пользовательская трансляция может быть наименьшим усилием, без потери принятых мер безопасности... потому что это работает как system:system.
Martin Zeitler 28.03.2019 13:36

@MartinZeitler Спасибо за подробное объяснение, сэр.

AyTee 28.03.2019 15:52

Другие вопросы по теме