检查Appcelerator Mobile应用程序中的网络连接类型是2G,3G,4G还是WiFi?

时间:2016-04-28 13:05:32

标签: appcelerator appcelerator-titanium

我正在使用Appcelerator Titanium 5.2 SDK中的应用程序,这需要在sync过程中建立稳定的互联网连接。

我想限制应用程序才能正常工作,只有当其在线和网络连接类型为3G4GWiFi时才有效。我不希望应用通过2GEDGEGPRS等慢速连接进行同步...

如何在appcelerator钛金属移动应用中实现这一目标?

我可以查看我的应用程序,如果它在线或不使用此方法:

Alloy.Globals.online = Ti.Network.online;
Ti.Network.addEventListener( 'change', function( e ) {
    Alloy.Globals.online = e.online;
});

这只告诉我连接状态,但我所追求的连接类型信息不可用。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我知道您可以使用Ti.Network.networkTypeName或Ti.Network.networkType,如下所述:https://docs.appcelerator.com/platform/latest/#!/api/Titanium.Network-property-networkTypeName 但我不确定这对你来说是否足够。我可以推荐你的第二件事是这个模块:https://github.com/benbahrenburg/Pinger 它只是一个检查用户是否有互联网的工具¯_(ツ)_ /¯

答案 1 :(得分:1)

我们为此创建了一个原生iOS模块。不幸的是,该模块尚未作为开源提供。如果您熟悉模块,这应该可以帮助您入门(文件名:MobileNetworkType.m):

#import "MobileNetworkType.h"
@import CoreTelephony;

@interface MobileNetworkType ()

@end

@implementation MobileNetworkType

- (NSString *)getMobileDataConnectionType {
  CTTelephonyNetworkInfo *telephonyInfo = [CTTelephonyNetworkInfo new];
  NSString *radioAccessTechnology =       telephonyInfo.currentRadioAccessTechnology;

if ([radioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS]) {
    return @"GPRS";
} else if ([radioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge]) {
    return @"Edge";
} else if ([radioAccessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA]
           || [radioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA]
           || [radioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA]
           || [radioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMA1x]
           || [radioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0]
           || [radioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA]
           || [radioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB]
           || [radioAccessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD]) {
    return @"3G";
} else if ([radioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) {
    return @"LTE";
}
return @"Unknown";
}

@end

和(filename:MobileNetworkType.h):

@interface MobileNetworkType : NSObject 
-(NSString *) getMobileDataConnectionType;
@end