怎样判断当前设备是否连接了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
相关问题
怎样判断当前线程是否是主线程?
965浏览 • 1回复 待解决
HarmonyOS 判断网络是否连接
188浏览 • 1回复 待解决
判断当前设备是手机还是平板
6969浏览 • 1回复 待解决
如何判断当前设备是不是折叠屏?
1218浏览 • 1回复 待解决
HarmonyOS 如何判断当前网络是否可用
576浏览 • 1回复 待解决
HarmonyOS 判断设备是否安装某个app
254浏览 • 1回复 待解决
HarmonyOS 在h5页面怎样判断当前环境?
450浏览 • 1回复 待解决
如何判断当前线程是否是主线程
2835浏览 • 1回复 待解决