Richten Sie eine VPN-Verbindung programmgesteuert auf Android 4.0 ein

Ich arbeite programmgesteuert daran, eine VPN-Verbindung auf Android-Geräten einzurichten. Ich war erfolgreich in der Lage, dies für Geräte mit OS 2.3.5 und früher zu tun (ich habe Reflektion verwendet, um zu den versteckten Klassen zu gelangen). Aber mit Android 4.0 haben sie die alten Klassen entfernt und verwenden stattdessen die VPNService-Klasse.

Ich dachte, der beste Startpunkt wäre, das mitgelieferte ToyVPN-Beispiel für Android zu verwenden, aber ich stehe damit vor einer Menge Herausforderungen. Im Beispielcode mussten sie nur die Serveradresse senden:

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

Und dann den VPN-Tunnel durch Öffnen des Kanals erstellt:

tunnel = DatagramChannel.open();

Aber in meinem Fall muss ich die Serveradresse, den Benutzernamen und das Passwort senden. Bisher habe ich nicht herausgefunden, wie das geht. Meine beste Vermutung war, so etwas zu machen:

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

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

        tunnel = DatagramChannel.open();

Das hat aber nicht geklappt. also was ich frage ist:

Gibt es eine andere als die in ToyVpn verwendete Möglichkeit, programmgesteuert eine VPN-Verbindung herzustellen?Wenn nicht, wie sende ich die Anmeldeinformationen, wenn ich eine Verbindung zum Server herstellen möchte?

Bearbeiten

Ich habe vergessen zu erwähnen, dass ich den VPN-Typ angeben muss (PPTP, L2TP, L2TP / IPSec PSK oder L2TP / IPSec CRT).

Antworten auf die Frage(2)

Ihre Antwort auf die Frage