2016-04-28 45 views
0

我正在研究Appcelerator Titanium 5.2 SDK中的应用程序,该程序在sync进程中需要稳定的Internet连接。检查Appcelerator Mobile应用程序中的网络连接类型是2G,3G,4G还是WiFi?

我想限制应用程序的工作,只有当它的在线和网络连接类型是3G4GWiFi。我不希望应用程序通过慢速连接进行同步,如2GEDGE,GPRS等...

我该如何在appcelerator钛移动应用程序中实现此目的?

我可以检查出来,通过我的应用程序,如果是在网上或不使用这种方法:

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

这只会告诉我的连接状态,但连接类型的信息,我以后不可用。有任何想法吗?

回答

2

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

+0

'网络类型为String 。返回NONE,WIFI,LAN,MOBILE或UNKNOWN之一 - 这不会告诉你它的2g,3g,4g等等,我不需要一个模块来检查我在线或不在线。我上面提出的代码就足够了。 – Latheesan

+1

它返回你,如果它是移动或无线...至少是东西。而Ti.Network.online很糟糕,因为如果你连接起来但在网络中有一些问题,它会返回你的真实...只是试图帮助你的队友 –

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 

和(文件名:MobileNetworkType.h):

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