Definir uma conexão VPN programaticamente no android 4.0
Eu estou trabalhando em definir programaticamente uma conexão VPN em dispositivos Android. Eu consegui fazer isso com sucesso para dispositivos que usam o OS 2.3.5 e antes (usei a reflexão para acessar as classes ocultas). Mas com o Android 4.0 eles se livraram das classes antigas e usaram a classe VPNService.
Imaginei que o melhor lugar para começar seria usar o exemplo do Android do ToyVPN, mas estou enfrentando muitos desafios com ele. No código de exemplo, eles precisavam apenas enviar o endereço do servidor:
InetSocketAddress server = new InetSocketAddress(mServerAddress, Integer.parseInt(mServerPort));
E então criei o túnel VPN abrindo o canal:
tunnel = DatagramChannel.open();
Mas no meu caso eu preciso enviar o endereço do servidor, nome de usuário e senha. Até agora eu não descobri como fazer isso. Meu melhor palpite era fazer algo assim:
Authenticator.setDefault(new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("user","pass".toCharArray());
}});
try {
// Create a DatagramChannel as the VPN tunnel.
tunnel = DatagramChannel.open();
Mas isso não funcionou. então o que eu estou perguntando é:
Existe uma maneira, diferente do que é usado no ToyVpn, para criar uma conexão VPN programaticamente?Se não, como envio as credenciais quando desejo estabelecer uma conexão com o servidor?Editar
Esqueci de mencionar que preciso especificar o tipo de VPN (PPTP, L2TP, L2TP / IPSec PSK ou L2TP / IPSec CRT).