我不确定这是否可行,但我有这种情况.
我的UIWebView中显示了一个网站,该网站在UISegmentedController中设置了链接.他们的网站可以检测您是在wifi上还是在3g网络上.
现在,分段控制器指向2个不同的页面:1 - iPhone友好登录屏幕2 - 主页,一旦您登录.
现在问题是:
我可以编程我的应用程序来检测它是WIFI还是3G(我知道你可以这样做),但是根据答案转到第1或第2部分
有点像这样:
if (iPhone device is on 3g) {
Go to Segment 1;
} else {
Go to Segment 0;
}
Run Code Online (Sandbox Code Playgroud) 我想将新的承载添加到Android(rooted/custom build),成为Wifi和GPRS的同行.
我做了一些Android开发,我知道(在Android 2.2中)有WIFI和GPRS的常量.这是否意味着我需要在所有地方添加常量,以及提供网络堆栈?
我要添加的第一个载体是USBNet(用于带USB主机的Androids).
另一个是3G USB加密狗作为第二个GPRS承载.
我已经开始下载源代码了.
如果我正在构建一个定期从服务器下载数据的智能手机应用程序,并且还间歇性地上传数据(分析,广告等),我该怎么做才能最大限度地减少这些传输对电池寿命的影响?
使用无线电(2G,3G,LTE等)的传输对电池的影响尤为显着.无线电的电源使用情况是否会影响我选择何时,何地以及如何传输数据以最大限度地减少其对电池寿命的影响?
我的应用程序上有一个显示网络类型(2G或3G或4G)的指示器,但在获取网络类型后,我如何知道应该在哪个速度类别?
我知道如何检测网络类型:
private TelephonyManager telephonyManager;
telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
CurrentNetworkType = telephonyManager.getNetworkType();
Run Code Online (Sandbox Code Playgroud)
鉴于可能的返回值:
// public static final int NETWORK_TYPE_1xRTT
// Since: API Level 4
// Current network is 1xRTT
// Constant Value: 7 (0x00000007)
//
// public static final int NETWORK_TYPE_CDMA
// Since: API Level 4
// Current network is CDMA: Either IS95A or IS95B
// Constant Value: 4 (0x00000004)
//
// public static final int NETWORK_TYPE_EDGE
// Since: API Level 1
// Current network is EDGE
// Constant Value: …
Run Code Online (Sandbox Code Playgroud) 我希望能够在提交到应用商店之前检查我的应用的大小.更具体地说,我需要知道它是否会低于神奇的20 MB,以允许细胞下载,因为该应用程序是为节日创建的.
我一直在玩Socket.io,node.js和WebSockets,所有这些都可以通过wifi连接正常工作.
但是,当我通过3G连接(例如我的iPhone)测试启用WebSocket的应用程序时,似乎回到长轮询是唯一可行的解决方案.
使用Socket.io连接失败,"WebSocket连接无效或Origin未验证",然后再回到长轮询.
我不知道WebSockets是否可以通过3G工作 - 有没有人成功让他们这样工作?我已经尝试了许多不同的方法,而且一切似乎都失败了,这让我觉得我正在尝试不可能的事情.
如何在Android上以编程方式关闭3G /数据?
不是Wifi,而是3G /数据.
我正在开发一个应用程序,需要通过流媒体播放音乐文件进行现场直播.
在请求歌曲api中,我可以指定带宽(例如:50kbps,100kbps,300,600或1Mbps).
bandwith越大,文件就越有时间获取.由于我不希望用户受到限制,因此我有多种选择来处理它:
检测手机是否正在使用3g,wifi或Edge,并为每个连接速度指定带宽.
让用户决定他将获得的歌曲的质量:像youtube(但用户不会是那些对计算有更多了解的人:软件越容易,它就越适合)
有办法正确评估连接速度:就像获取文件一样,测量它所花费的时间并设置带宽.
我知道如果用户松开wifi,或者在街上使用3g移动,连接速度可能会有很大变化.而事实是,当歌曲播放时我无法改变带宽.
也许你有关于你想分享的经验?
谢谢!
我正试图在软件中实现一个打孔功能.问题是,我正在使用已经建立的TCP服务器与用户进行通信.
这是我到目前为止所拥有的:
当然,例如端口31000,31005,45000和45005,每个端口改变的新连接,只有9333是静态的.
我知道有很多来回,比实际情况还要多.事实上,我必然会使用TCP服务器与两个用户进行通信,udp服务器只是将用户的端口返回给自己,因此它可以将其发送回TCP服务器.
但是,任何人都不会收到用户之间的消息......任何人都会知道为什么?
编辑:
我用http://nattest.net.in.tum.de/test.php测试了我的路由器,并且udp打孔工作正常,所以问题不是来自我的路由器,而是来自我的协议......
当用户在同一个NAT后面时,一切正常,当然它使用了private ip,但这意味着代码也在工作,所以每一个都会导致协议问题......
编辑2:
实际上,我做了一半的工作(问题实际上来自我的代码,而不是协议......我已经连接了2个用户,一个用3G连接iPhone,一个连接在Wifi上我的NAT.
有趣的(不是那么多)事情是,只有一个套接字能够在两个用户之间接收和发送数据.(由iphone发起的套接字)根据协议,我应该有2个连接良好的套接字,我错了吗?
所以我设法在我的NAT中打了一个洞,但实际上并没有在蜂窝NAT中.
当然,我立即测试了2台连接在3G上的iphone.没有人得到另一个人的信息.
我错过了有关手机NAT的内容吗?
PS:很抱歉更新我的问题,但由于我没有得到答案,我试图自己找...
PS 2:因为我设法在我的NAT中打了一个洞,我改变了标题,加上"在3G上"
编辑3:我再次运行http://nattest.net.in.tum.de/test.php测试,我的电脑通过我的iphone的3G连接连接到互联网.
这是结果:
显然所有的udp打孔测试都是在第9次测试中成功的.
似乎还有更多:
UDP绑定测试(?):端点独立绑定,端口预测很容易
因此,通过3G连接连接2个对等设备应该不会有任何问题(远远不及"家庭"NAT背后)......我是对的吗?
编辑4:
为了确定,我现在向两个不同的UDP服务器发送消息,以检查3G上的端口和本地端口是否相同.
长话短说,端口(本地和公共)在两台服务器上连接时都是一样的.所以在EDIT 2上完成的测试是正确的,udp是端点独立的,所以我不应该在进行打孔时遇到任何问题......(至少我的ISP)
在3G下连接到iPad上的http://www.manage-us.com [曾经]导致JavaScript错误,如果启用了开发人员控制台,则可以看到该错误.如果在WiFi连接下使用同一台iPad访问同一页面,则不会显示错误.[错误现在已经消失,因为我应用了下面的修复程序!].
为什么是这样?
我尝试在Mac上的Safari和Mac上的iPad模拟器上模拟低带宽(使用dummynet).这不会重现问题.
我目前怀疑这是我的英国移动运营商(O2)引入的问题,已知通过代理缓存(例如降级图像文件)修改某些内容.如果您通过其他移动运营商通过3G在iPad或iPhone上进行连接时可以确认您没有遇到此问题.
3g ×10
android ×5
iphone ×3
wifi ×3
ios ×2
3g-network ×1
4g ×1
android-wifi ×1
ipad ×1
mobile ×1
networking ×1
node.js ×1
objective-c ×1
proxy ×1
reachability ×1
socket.io ×1
udp ×1
websocket ×1
xcode ×1