在我的应用程序中,我有一个BroadcastReceiver通过<receiver>标签作为组件启动,过滤android.net.conn.CONNECTIVITY_CHANGE意图.
我的目标只是知道何时建立了Wifi连接,所以我在做的onReceive()是:
NetworkInfo networkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if(networkInfo.getType() == ConnectivityManager.TYPE_WIFI && networkInfo.isConnected()) {
// Wifi is connected
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但在建立Wifi连接时,我似乎总是在大约一秒钟内得到两个相同的意图.我想看看任何信息,我可以从意图,获得ConnectivityManager和WifiManager,但我无法找到任何区别这两种意图.
查看日志,至少还有一个BroadcastReceiver也接收到两个相同的意图.
它运行在搭载Android 2.2的HTC Desire上
任何想法为什么我似乎在Wifi连接时获得"重复"的意图或两者之间的差异可能是什么?
我自动化wifi呼叫的测试程序,我想知道有没有办法通过adb关闭/开启wifi?
我想要禁用/启用wifi或杀死wifi呼叫(com.movial.wificall)并重新启动它.
是否可以通过adb和shell命令执行此操作?
到目前为止,我发现:
android.net.wifi.WifiManager
setWifiEnabled(true/false)
Run Code Online (Sandbox Code Playgroud)
我只是不确定如何把它放在一起
我可以使用以下代码获得以dBm为单位的WiFi信号电平.
for (ScanResult result : wifiScanResultList) {
int signalLevel = result.level;
}
Run Code Online (Sandbox Code Playgroud)
它给出了负面价值.当我们看到默认的系统WiFi设置并点击连接的WiFi网络时,它会给出"好"或"坏"作为信号强度.我们可以将这些负值过滤为"良好"信号强度或"差"信号强度的范围是多少?
昨天我的Nexus 5收到了Android MNC版本的更新6.0 - Marshmallow.从那时起,扫描设备中可用网络的操作就会停止接收列表,在这种情况下,结果列表的大小为0,即使在Wifi系统设置中列出了10多个Wifi网络.
通常的代码是:SCAN_RESULTS_AVAILABLE_ACTION在Receiver中注册并等待事件,如下所示:
// Register the Receiver in some part os fragment...
getActivity().registerReceiver(wifiListener, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
WifiManager wifiManager = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE);
wifiManager.startScan();
// Inside the receiver:
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
List<ScanResult> results = wifiManager.getScanResults();
// the result.size() is 0 after update to Android v6.0, same code working in older devices.
Run Code Online (Sandbox Code Playgroud)
我搜索了有关此主题的API主题的更改,但我没有看到此功能的任何重大更改.
有没有人注意到这个?API中是新的东西还是仅仅是一个孤立的案例?
我浪费了一整天的时间尝试在SO和其他提到的地方漂浮的不同解决方案,以便在Android模拟器上启用wifi,但无济于事.任何人都可以帮我弄清楚如何在我的Android模拟器上启用互联网?
我有Nexus 5X API 27,目标是Android 8.1(Google Play)和Nexus 5 API P,目标是Android 7.1.1.
我相信应该有一种方法来启用互联网,否则在模拟器上提供虚拟wifi的重点似乎是浪费.
我在mac OS HS 10.13.4上直接连接到没有代理的路由器.
我甚至尝试删除所有avds,重新安装它们.我甚至尝试使用Oreo Android 8.1安装最新的Pixel 2
似乎没有什么工作.有人遇到过这个问题并找到了解决方案吗?
任何帮助都会有很大的帮助
谢谢,维克拉姆
更新:当我通过手机将我的电脑连接为热点wifi时,模拟器通过wifi连接互联网,但是当我将计算机连接到家用路由器时它失败了.
如何在wifi下连接时获取手机的IP地址?
我在这里找到了一个方法,但它返回了类似24.182.239.255的东西,即使我在wifi下,我期待像192.168.1.10这样的东西.
我喜欢这样的东西:
if (you are under wifi)
String ip4 = getWifiIP()
else
String ip4 = getIPAddress with the method linked before
Run Code Online (Sandbox Code Playgroud)
非常感谢!
我正在开发一个应用程序,需要通过流媒体播放音乐文件进行现场直播.
在请求歌曲api中,我可以指定带宽(例如:50kbps,100kbps,300,600或1Mbps).
bandwith越大,文件就越有时间获取.由于我不希望用户受到限制,因此我有多种选择来处理它:
检测手机是否正在使用3g,wifi或Edge,并为每个连接速度指定带宽.
让用户决定他将获得的歌曲的质量:像youtube(但用户不会是那些对计算有更多了解的人:软件越容易,它就越适合)
有办法正确评估连接速度:就像获取文件一样,测量它所花费的时间并设置带宽.
我知道如果用户松开wifi,或者在街上使用3g移动,连接速度可能会有很大变化.而事实是,当歌曲播放时我无法改变带宽.
也许你有关于你想分享的经验?
谢谢!
我一直在阅读很多关于影响某些人的GCM问题的帖子.似乎在一些设备/路由器/运营商中,通知遭受延迟.我的路由器经历过这个问题:WIFI上的消息有很多延迟,但是当我禁用WIFI并连接到移动网络时,消息就会立即出现.
似乎可以通过Android应用程序完成解决方法.像增加心跳使GCM连接保持活跃等等.
任何人都可以告诉我们我们应该做些什么来避免延误?我们如何通过Android应用程序保持与GCM的连接?代码示例(以及在何处以及如何使用它)将非常有用.
这篇文章解释了这个问题.它说"我们可以通过每两分钟从GCM服务器(这是免费的)ping一直保持连接".我们怎么做?
非常感谢
以下应用似乎可以解决问题.令人惊讶的是,第一个不需要任何许可,第二个是互联网连接,第三个仅适用于root电话:
https://play.google.com/store/apps/details?id=at.pansy.droid.gcmWifiFix
https://play.google.com/store/apps/details?id=com.elotro.pushheartbeat
https://play.google.com/store/apps/details?id=com.andqlimax.pushfixer
android push-notification wifi android-wifi google-cloud-messaging
SDK:Android 5.0.1.
Android版本:LRX22C.
设备:Nexus 5.
问题:KITKAT(4.4.4)及以下API
1)startUsingNetworkFeature(int networkType, String feature)
不推荐使用此方法.不赞成使用清洁剂requestNetwork(NetworkRequest, ConnectivityManager.NetworkCallback).
2)requestRouteToHost(int networkType, int hostAddress)
不推荐使用此方法.贬低赞成requestNetwork(NetworkRequest, ConnectivityManager.NetworkCallback),setProcessDefaultNetwork(Network)和getSocketFactory().
用于在WIFI和移动数据打开时通过移动数据网络发送请求.
启动Android L后,API已弃用,不再有效.
新的API /类NetworkRequest.Builder,NetworkRequest,ConnectivityManager.NetworkCallback,requestNetwork,registerNetworkCallback分别使用.
详细信息这里有关于API使用
Android L API的信息
码:
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder builder = new NetworkRequest.Builder();
builder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);
builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
NetworkRequest networkRequest = builder.build();
connectivityManager.requestNetwork(networkRequest, networkCallback);
connectivityManager.registerNetworkCallback(networkRequest, networkCallback);
Run Code Online (Sandbox Code Playgroud)
工作场景:
仅onAvailable接收回调上的移动数据.
不工作场景:移动和Wifi都已打开并连接,onAvailable未从系统接收回叫.因此无法设置setProcessDefaultNetwork,
ConnectivityManager.setProcessDefaultNetwork(preferedNetwork);
经常:永远
预期输出:当wifi打开时获取移动网络avaliabe回调. …
我正在寻找一种方法来创建一个NFC标签,该标签共享我的网络的wifi凭据,而我的客人不必在他们的手机上安装任何特殊的NFC应用程序(除了随手机提供的).我一直在寻找NFC标签编写器,WifiTap,NFC任务启动器和NFCLabels.com等应用和服务,但在我看来,我需要在客户移动设备上安装应用程序以便能够使用它,但我无法测试它,因为我只有一部支持NFC的手机.(是的,我知道,绞尽脑汁,但是,哎呀,奇怪的行为并不是什么新鲜事......)
我最接近的线索是WifiTap声明:
该应用程序以wifi:// [network ssid]/[wep | wpa | open]/[network key]的格式处理URI
如果这实际上是普遍的,这意味着我可以做我想做的事,但我没有找到任何确认.那么,我想要做什么怎么样才能完成,我是否能够利用WifiTap的线索走上正轨?