How to detect programatically if traffic is going through VPN without using intent to connect to VPNService. Is there some system call?
You can detect VPN with following code in android. Code will work in new and older version of android. Below code is in Kotlin.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if(checkVPNStatus()) {
Log.d("VPN-RAJ", "is VPN Connected YES")
} else {
Log.d("VPN-RAJ", "is VPN Connected NO")
}
}
private fun checkVPNStatus(): Boolean {
val connectivityManager = this.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
return if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
val network = connectivityManager.activeNetwork
val capabilities = connectivityManager.getNetworkCapabilities(network)
Log.d("VPN-RAJ", "in New Android Version")
capabilities!= null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)
} else {
Log.d("VPN-RAJ", "in Old Android Version")
connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_VPN)!!.isConnectedOrConnecting
}
}
}