我有两个使用VpnService类的应用程序.但是一次只能运行一个VPN连接.创建新接口时,现有接口将被停用,我希望新应用程序不要启动vpnservice以避免旧接口被停用及其VPN连接.因此,我想在调用startService()之前检查是否已启动另一个vpnservice.
有没有API可以做到这一点?
解决方法:
据我所知您不能直接检查.以下是我在应用程序中用于检查VPN连接的方法.
1)拨打http://jsonip.com的HTTPGet调用
public static String GetDeviceIp(){
HttpGet req = new HttpGet("http://jsonip.com");
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(req);
if (response.getStatusLine().getStatusCode() == 200){
ipaddress=parseJson(response.getEntity().getContent());
}else
{ ipaddress ="EMPTY" }
return ipaddress
}
2)解析json响应并从响应中提取IP地址
public static String parseJson(InputStream in)
{
String iP;
try{
String result;
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = bufferedReader.readLine()) != null)
{
sb.append(line + "\n");
}
result = sb.toString();
JSONObject jsonObject = new JSONObject(result);
iP=jsonObject.getString("ip");
}catch (Exception e){
iP="EMPTY";
}
return iP;
}
3)比较VPN服务器Ip和提取的Ip是否相等,如果是,则VPN打开,否则VPN关闭
public static boolean IsVPNON(){
return GetDeviceIp().equals("VPN-IP address");}