So far:
I found the following solutions
Using Broadcastreceiver
The broadcast receiver is deprecated from ICS
Using Ping or Traceroute
It's definitely going to take lots of time and its not efficient
Polling for DNS server changes
It's definitely going to take lots of time and its not efficient
Using ip-address
Even though it won't take much time depending on the network connection it may vary
My conclusion:
So far all the solutions I found are either not efficient or not so reliable.
My questions:
If VPN is connected in android device then android OS must be aware of it.
Are there any public android framework APIs to read it because finding it locally is most efficient and reliable solution ?
Are there any other efficient and reliable ways to achieve it (like integrating a C or C plus plus library with NDK)?
Note:
I couldn't find any custom broadcast senders/AIDL from OpenVPN for Android as well
You can try to check for tun0 INTERFACE, It is being start afther the establish command.
try {
for( NetworkInterface intf : Collections.list(NetworkInterface.getNetworkInterfaces())) {
// Pass over dormant interfaces
if(!intf.isUp() || intf.getInterfaceAddresses().size() == 0)
continue;
if ("tun0".equals(intf.getName())){
// The VPN is up
break;
}
}
}
this also might work:
(Collections.list(NetworkInterface.getByName("tun0")
Have you used - VpnService
As per documentation -
Prepare to establish a VPN connection. This method returns 'null' if the VPN application
is 'already prepared'.
From here-
http://developer.android.com/reference/android/net/VpnService.html#prepare(android.content.Context)
Intent intent = VpnService.prepare(getApplicationContext());
if (intent == null) {
// this means there is already a prepared VPN connection
}
I know the answer is ridiculously late, but I was just trying to figure this out and stumbled upon the command:
ifconfig tun0
This will return an IP address
and other info if the VPN is connected and if it isn't.
tun0: No such device