怎样判断当前设备是否连接了VPN?

当前尝试通过以下方式获取设备是否连接VPN:

public static async isVPN(): Promise<boolean> { 
  try { 
  const defaultNetHandle = await netConnection.getDefaultNet() 
  const capabilities = await netConnection.getNetCapabilities(defaultNetHandle) 
  const noVpnCap: netConnection.NetCap | undefined = capabilities.networkCap?.find((elem: netConnection.NetCap) => { 
    return elem == netConnection.NetCap.NET_CAPABILITY_NOT_VPN 
  }) 
 
  return !noVpnCap 
} catch(error) { 
  logger.e("invoke isVPN failed.", error) 
  return false 
} 
}

但是结果并不符合预期,该方法始终返回true。请问该种用法是否存在错误,以及是否有更好的办法判断设备是否连接了VPN?

HarmonyOS
2024-09-10 12:18:35
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

如需要判断获取VPN,当前可使用getNetCapabilities方法获取的bearerTypes参数,当bearerTypes的值是4时表示使用了VPN;

connection.getDefaultNet().then((netHandle: connection.NetHandle) => { 
  connection.getNetCapabilities(netHandle).then((data: connection.NetCapabilities) => { 
    const type: Number = data.bearerTypes[0]; 
    if (type === 4) { 
      console.log('is VPN'); 
    } 
  }) 
});
分享
微博
QQ
微信
回复
2024-09-10 17:29:05
相关问题
怎样判断当前线程是否是主线程?
527浏览 • 1回复 待解决
判断当前设备是手机还是平板
6420浏览 • 1回复 待解决
如何判断当前设备是不是折叠屏?
624浏览 • 1回复 待解决
如何判断当前线程是否是主线程
2444浏览 • 1回复 待解决
判断当前app的运行环境是否是64位
441浏览 • 1回复 待解决
如何判断当前网络是否是Wi-Fi环境?
421浏览 • 1回复 待解决
怎样判断应用可以被卸载
541浏览 • 1回复 待解决
获取当前WLAN连接信息
716浏览 • 1回复 待解决