提交 2d45beca 编写于 作者: inkwalk's avatar inkwalk

feat(App): getNetworkType、onNetworkStatusChange、offNetworkStatusChange

上级 e4f72d50
import { NETWORK_TYPES } from '../constants'
import { defineOnApi, defineOffApi, defineAsyncApi } from '@dcloudio/uni-api'
type OnNetworkStatusChange = typeof uni.onNetworkStatusChange
const API_ON_NETWORK_STATUS_CHANGE = 'onNetworkStatusChange'
function networkListener() {
getNetworkType().then(({ networkType }) => {
UniServiceJSBridge.invokeOnCallback<OnNetworkStatusChange>(
API_ON_NETWORK_STATUS_CHANGE,
{
isConnected: networkType !== 'none',
networkType,
}
)
})
}
// 注意:框架对on类的API已做了统一的前置处理(仅首次调用on方法时,会调用具体的平台on实现,后续调用,框架不会再调用,实现时,直接监听平台事件即可)
export const onNetworkStatusChange = defineOnApi<OnNetworkStatusChange>(
API_ON_NETWORK_STATUS_CHANGE,
() => {
;(plus as any).globalEvent.addEventListener('netchange', networkListener)
}
)
// 注意:框架对off类的API已做了统一的前置处理(仅当框架内不存在对应的on监听时,会调用具体的平台off实现,若还存在事件,框架不会再调用,具体实现时,直接移除平台事件即可)
export const offNetworkStatusChange = defineOffApi<
typeof uni.offNetworkStatusChange
>('offNetworkStatusChange', () => {
;(plus as any).globalEvent.removeEventListener('netchange', networkListener)
})
export const getNetworkType = defineAsyncApi<typeof uni.getNetworkType>(
'getNetworkType',
(_args, { resolve }) => {
let networkType =
NETWORK_TYPES[plus.networkinfo.getCurrentType()] || 'unknown'
return resolve({ networkType })
}
)
......@@ -9,6 +9,7 @@ export * from './device/bluetooth'
export * from './device/ibeacon'
export * from './device/makePhoneCall'
export * from './device/clipboard'
export * from './device/network'
export * from './media/getImageInfo'
export * from './media/getVideoInfo'
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册