Студия Android: как подключиться к существующему VPN из настроек Android

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

До сих пор я смог открыть активность настроек через намерение:

Intent intent = new Intent(android.provider.Settings.ACTION_VPN_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

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

Есть ли способ щелкнуть программно? Я думаю, что должен быть способ, потому что приложение "Automagic Premium" работает именно так, но я не знаю как.

Я нашел например:

View.performClick()

но как получить представление о начатых в настоящее время намерениях?

Или есть другой способ подключения?

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

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

1 ответ

Я нашел способ с помощью AccessibilityService выполнить щелчок кнопки в действии настроек. Я реализовал AccessibilityService-класс с методом onAccessibilityEvent, как это:

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
    Log.i(TAG, "ACC::onAccessibilityEvent: " + event.getEventType());    
    if(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED== event.getEventType()){
        AccessibilityNodeInfo nodeInfo = event.getSource();
        if (nodeInfo == null) {
            return;
        }

        List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("MyVPNConnection");
        for (AccessibilityNodeInfo node : list) {
            node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
        }
    }
return;
}

К сожалению, AccessibilityNodeInfo "MyVPNConnection" не активируется. Итак, вызов node.performAction(AccessibilityNodeInfo.ACTION_CLICK); возвращает ложь

Нажав на другие работы пользовательского интерфейса, как и ожидалось. Например, в той же настройке активности нажатие кнопки "Добавить VPN" прекрасно работает с кодом выше. Если у кого-то есть идея, пожалуйста, помогите мне. Это действительно расстраивает.

Обновить:

С помощью AccessibilityService я могу перейти к своему домашнему экрану и нажать на некоторые виджеты, например. Все виджеты, которые у меня есть на домашнем экране, активируются по клику, и открывается приложение, по которому щелкнули, кроме одного виджета (MYFritz!App 2), который должен подключаться к VPN. Это приводит меня к неудаче разрешения, но я не знаю, как это решить.

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