network-status-change.uvue 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <template>
  2. <page-head title="networkStatusChange"></page-head>
  3. <view class="uni-list-cell-padding status-box">
  4. <text class="uni-title-text">网络状态</text>
  5. <view class="uni-row uni-common-mt">
  6. <text class="uni-hello-text">是否连接:</text>
  7. <text>{{ isConnected ? '已连接' : '未连接' }}</text>
  8. </view>
  9. <view class="uni-row uni-common-mt">
  10. <text class="uni-hello-text">网络类型:</text>
  11. <text>{{ networkType }}</text>
  12. </view>
  13. <view class="uni-row uni-common-mt">
  14. <text class="uni-hello-text">监听状态:</text>
  15. <text>{{ listenStatus }}</text>
  16. </view>
  17. </view>
  18. <view class="uni-list-cell-padding uni-common-mt">
  19. <button type="primary" @click="startListen">开始监听</button>
  20. <button type="default" class="uni-common-mt" @click="stopListen">停止监听</button>
  21. </view>
  22. </template>
  23. <script lang="uts" setup>
  24. const isConnected = ref(false)
  25. const networkType = ref('unknown')
  26. const listenStatus = ref('未监听')
  27. const networkCallback = ref<((result : OnNetworkStatusChangeCallbackResult) => void) | null>(null)
  28. // 获取当前网络状态
  29. const getCurrentNetworkStatus = () => {
  30. uni.getNetworkType({
  31. success: (res) => {
  32. networkType.value = res.networkType
  33. isConnected.value = res.networkType != 'none'
  34. },
  35. fail: () => {
  36. console.log('获取网络状态失败')
  37. networkType.value = 'unknown'
  38. isConnected.value = false
  39. }
  40. })
  41. }
  42. // 开始监听
  43. const startListen = () => {
  44. if (networkCallback.value != null) {
  45. listenStatus.value = '正在监听'
  46. return
  47. }
  48. networkCallback.value = (result : OnNetworkStatusChangeCallbackResult) => {
  49. console.log('网络状态: ', result);
  50. isConnected.value = result.isConnected
  51. networkType.value = result.networkType
  52. if (!result.isConnected) {
  53. networkType.value = 'none'
  54. }
  55. }
  56. uni.onNetworkStatusChange(networkCallback.value)
  57. // console.log('开始监听网络状态')
  58. listenStatus.value = '正在监听'
  59. }
  60. // 停止监听
  61. const stopListen = () => {
  62. if (networkCallback.value == null) {
  63. listenStatus.value = '未监听'
  64. return
  65. }
  66. uni.offNetworkStatusChange(networkCallback.value)
  67. networkCallback.value = null
  68. // console.log('停止监听网络状态')
  69. listenStatus.value = '停止监听'
  70. }
  71. onLoad(() => {
  72. getCurrentNetworkStatus()
  73. })
  74. onUnload(() => {
  75. stopListen()
  76. })
  77. </script>
  78. <style>
  79. .status-box {
  80. background-color: #FFFFFF;
  81. margin: 0 20px;
  82. }
  83. </style>