mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
fix(android): #8733
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { android as androidApp, getNativeApplication } from '../application';
|
||||
import {android as androidApp, getNativeApplication} from '../application';
|
||||
|
||||
export enum connectionType {
|
||||
none = 0,
|
||||
wifi = 1,
|
||||
@@ -20,7 +21,7 @@ function getConnectivityManager(): android.net.ConnectivityManager {
|
||||
}
|
||||
|
||||
function getActiveNetworkInfo(): android.net.NetworkInfo {
|
||||
let connectivityManager = getConnectivityManager();
|
||||
const connectivityManager = getConnectivityManager();
|
||||
if (!connectivityManager) {
|
||||
return null;
|
||||
}
|
||||
@@ -29,13 +30,17 @@ function getActiveNetworkInfo(): android.net.NetworkInfo {
|
||||
}
|
||||
|
||||
function getNetworkCapabilities() {
|
||||
const connectivityManager = getConnectivityManager() as any;
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
const connectivityManager: any = getConnectivityManager();
|
||||
const network = connectivityManager.getActiveNetwork();
|
||||
const capabilities = connectivityManager.getNetworkCapabilities(network);
|
||||
if (capabilities == null) {
|
||||
return connectionType.none;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
const NetworkCapabilities = (android as any).net.NetworkCapabilities;
|
||||
|
||||
if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
|
||||
@@ -65,12 +70,12 @@ export function getConnectionType(): number {
|
||||
if (android.os.Build.VERSION.SDK_INT >= 28) {
|
||||
return getNetworkCapabilities();
|
||||
} else {
|
||||
let activeNetworkInfo = getActiveNetworkInfo();
|
||||
const activeNetworkInfo = getActiveNetworkInfo();
|
||||
if (!activeNetworkInfo || !activeNetworkInfo.isConnected()) {
|
||||
return connectionType.none;
|
||||
}
|
||||
|
||||
let type = activeNetworkInfo.getTypeName().toLowerCase();
|
||||
const type = activeNetworkInfo.getTypeName().toLowerCase();
|
||||
if (type.indexOf(wifi) !== -1) {
|
||||
return connectionType.wifi;
|
||||
}
|
||||
@@ -96,43 +101,62 @@ export function getConnectionType(): number {
|
||||
}
|
||||
|
||||
function startMonitoringLegacy(connectionTypeChangedCallback) {
|
||||
let onReceiveCallback = function onReceiveCallback(context: android.content.Context, intent: android.content.Intent) {
|
||||
let newConnectionType = getConnectionType();
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const onReceiveCallback = function onReceiveCallback(context: android.content.Context, intent: android.content.Intent) {
|
||||
const newConnectionType = getConnectionType();
|
||||
connectionTypeChangedCallback(newConnectionType);
|
||||
};
|
||||
let zoneCallback = <any>zonedCallback(onReceiveCallback);
|
||||
const zoneCallback = zonedCallback(onReceiveCallback);
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
androidApp.registerBroadcastReceiver(android.net.ConnectivityManager.CONNECTIVITY_ACTION, zoneCallback);
|
||||
}
|
||||
|
||||
let callback;
|
||||
let networkCallback;
|
||||
let notifyCallback;
|
||||
|
||||
export function startMonitoring(connectionTypeChangedCallback: (newConnectionType: number) => void): void {
|
||||
if (android.os.Build.VERSION.SDK_INT >= 28) {
|
||||
const manager = getConnectivityManager();
|
||||
if (manager) {
|
||||
notifyCallback = () => {
|
||||
let newConnectionType = getConnectionType();
|
||||
let zoneCallback = <any>zonedCallback(connectionTypeChangedCallback);
|
||||
const newConnectionType = getConnectionType();
|
||||
const zoneCallback = zonedCallback(connectionTypeChangedCallback);
|
||||
zoneCallback(newConnectionType);
|
||||
};
|
||||
const ConnectivityManager = android.net.ConnectivityManager;
|
||||
if (!networkCallback) {
|
||||
@NativeClass
|
||||
class NetworkCallbackImpl extends ConnectivityManager.NetworkCallback {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
onAvailable(network: android.net.Network) {
|
||||
notifyCallback();
|
||||
if (notifyCallback) {
|
||||
notifyCallback();
|
||||
}
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
onCapabilitiesChanged(network: android.net.Network, networkCapabilities: android.net.NetworkCapabilities) {
|
||||
notifyCallback();
|
||||
if (notifyCallback) {
|
||||
notifyCallback();
|
||||
}
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
onLost(network) {
|
||||
notifyCallback();
|
||||
if (notifyCallback) {
|
||||
notifyCallback();
|
||||
}
|
||||
}
|
||||
|
||||
onUnavailable() {
|
||||
notifyCallback();
|
||||
if (notifyCallback) {
|
||||
notifyCallback();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
networkCallback = NetworkCallbackImpl;
|
||||
}
|
||||
callback = new networkCallback();
|
||||
@@ -145,7 +169,9 @@ export function startMonitoring(connectionTypeChangedCallback: (newConnectionTyp
|
||||
|
||||
export function stopMonitoring(): void {
|
||||
if (android.os.Build.VERSION.SDK_INT >= 28) {
|
||||
const manager = getConnectivityManager() as any;
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
const manager = getConnectivityManager();
|
||||
if (manager && callback) {
|
||||
manager.unregisterNetworkCallback(callback);
|
||||
notifyCallback = null;
|
||||
|
||||
Reference in New Issue
Block a user