Установить VPN-соединение программно на Android 4.0
Я работаю над программной настройкой VPN-подключения на устройствах Android. Я успешно смог сделать это для устройств, использующих ОС 2.3.5 и ранее (я использовал отражение, чтобы добраться до скрытых классов). Но с Android 4.0 они избавились от старых классов и вместо этого используют класс VPNService.
Я подумал, что для начала лучше всего использовать предоставленный Android пример ToyVPN, но я столкнулся с множеством проблем. В примере кода им нужно было только отправить адрес сервера:
InetSocketAddress server = new InetSocketAddress(mServerAddress, Integer.parseInt(mServerPort));
А затем создал VPN-туннель, открыв канал:
tunnel = DatagramChannel.open();
Но в моем случае мне нужно отправить адрес сервера, имя пользователя и пароль. До сих пор я не понял, как это сделать. Моим лучшим предположением было сделать что-то вроде этого:
Authenticator.setDefault(new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("user","pass".toCharArray());
}});
try {
// Create a DatagramChannel as the VPN tunnel.
tunnel = DatagramChannel.open();
Но это не сработало. поэтому я спрашиваю:
Is there a way, other than what's used in ToyVpn, to create a VPN connection programmatically? If not, how do I send the credentials when I want to establish a connection to the server?Edit
Я забыл упомянуть, что мне нужно указать тип VPN (PPTP, L2TP, L2TP / IPSec PSK или L2TP / IPSec CRT).