[英]How to check VPN connection status on Android ICS
我正在嘗試注冊接收器,這將檢查 VPN 狀態。 我試過這個: 在 Android 上獲取 VPN 連接狀態,但看起來它不再適用於 ICS。 我已經檢查了 android 源代碼以獲取一些線索,但沒有運氣,只注意到在 ISC 中沒有類似的東西: vpn.connectivity
和connection_state
- 它vpn.connectivity
在 android 2.3 中。 還嘗試使用android.net.conn.CONNECTIVITY_CHANGE
作為我的IntentFilter
,但它根本不對 VPN 連接做出反應(當然我已經添加了權限android.permission.ACCESS_NETWORK_STATE
)。 我認為這很簡單,但我已經沒有想法了……有人可以幫我嗎?
也許您可以嘗試輪詢 DNS 服務器更改。 如果它已更改,則 VPN 已連接。 但是,我認為這條規則可能有很多例外。
我的解決方案是輪詢 NIC 列表。
# 你可以通過執行命令“ls /sys/class/net”來獲取列表。
如果列表中有“tun0”,則設備已經連接到 VPN。
NetworkCapabilities
在 API 21+ 中為我工作。 不幸的是,我還沒有找到 19-20 的解決方案。 您必須遍歷所有現有網絡並檢查哪個具有VPN_TRANSPORT
ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
Network[] networks = cm.getAllNetworks();
Log.i(TAG, "Network count: " + networks.length);
for(int i = 0; i < networks.length; i++) {
NetworkCapabilities caps = cm.getNetworkCapabilities(networks[i]);
Log.i(TAG, "Network " + i + ": " + networks[i].toString());
Log.i(TAG, "VPN transport is: " + caps.hasTransport(NetworkCapabilities.TRANSPORT_VPN));
Log.i(TAG, "NOT_VPN capability is: " + caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN));
}
for (Enumeration<NetworkInterface> en =
NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
NetworkInterface intf = en.nextElement();
if (intf.getName().contains("tun0") || intf.getName().contains("ppp0")) {
vpnInterface = intf;
break;
}
}
對於 VPN 網絡接口
for (Enumeration<InetAddress> en =
vpnInterface.getInetAddresses(); en.hasMoreElements(); ) {
InetAddress address = en.nextElement();
if (!address.isLoopbackAddress()) {
String ip = address.getHostAddress();
break;
}
}
和 InetAddress
這就是我現在所知道的一切
檢查它是否已啟動等。也許
if (vpnInterface.isUp())
我確實實現了一個代碼,它在一段時間后調用自己並向 ApplicationHandlers 發送消息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.