Ustaw połączenie VPN programowo na Androida 4.0

Pracuję nad programowym ustawieniem połączenia VPN na urządzeniach z Androidem. Udało mi się to zrobić dla urządzeń korzystających z systemu operacyjnego 2.3.5 i wcześniejszych (użyłem refleksji, aby dostać się do ukrytych klas). Ale z Androidem 4.0 pozbyli się starych klas i zamiast tego użyli klasy VPNService.

Pomyślałem, że najlepszym miejscem do rozpoczęcia będzie użycie dostarczonego przykładu ToyVPN, ale stoję przed wieloma wyzwaniami. W przykładowym kodzie wystarczyło jedynie wysłać adres serwera:

InetSocketAddress server = new InetSocketAddress(mServerAddress, Integer.parseInt(mServerPort));

Następnie utworzył tunel VPN, otwierając kanał:

tunnel = DatagramChannel.open();

Ale w moim przypadku muszę wysłać adres serwera, nazwę użytkownika i hasło. Jak dotąd nie wiem, jak to zrobić. Moim najlepszym pomysłem było zrobienie czegoś takiego:

Authenticator.setDefault(new Authenticator(){
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("user","pass".toCharArray());
        }});

    try {
        // Create a DatagramChannel as the VPN tunnel.

        tunnel = DatagramChannel.open();

Ale to nie zadziałało. więc pytam:

Czy istnieje sposób, poza tym, co jest używane w ToyVpn, na programowe utworzenie połączenia VPN?Jeśli nie, jak mogę wysłać poświadczenia, gdy chcę nawiązać połączenie z serwerem?

Edytować

Zapomniałem wspomnieć, że muszę określić typ VPN (PPTP, L2TP, L2TP / IPSec PSK lub L2TP / IPSec CRT).

questionAnswers(2)

yourAnswerToTheQuestion