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回调. …
我需要检测何时与特定WIFI网络建立网络连接.
例如:一旦你走进你的房子,你的手机拿起你的家庭WiFi网络,我想要一条通知说"你不在你的家庭网络,你想连接到你家吗?" 但我希望这只会发生在我特定的房子里.
我应该注意什么,我应该做些什么测试来确保它是我的特定家庭网络,而不是另一个网络?
我正试图获得用户连接到网络的那一刻,然后我认为这BroadcastReceiver
是一个很好的方法......我想做的事情是,当用户连接到网络时,知道该网络是否已连接到Internet .
主要的是知道WiFi是否需要Browse Log in
示例:Handling Network Sign-On
文档
我把我BroadcastReceiver
变成了这个
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
NetworkInfo networkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (networkInfo != null && networkInfo.getDetailedState() == NetworkInfo.DetailedState.CONNECTED) {
Log.d("Network", "Internet YAY");
} else if (networkInfo != null && networkInfo.getDetailedState() == NetworkInfo.DetailedState.DISCONNECTED) {
if (isNetworkOnline()) {
Log.d(TAG, String.valueOf(tikis));
NetTask TeInternet = new NetTask();
TeInternet.execute("https://www.google.com");
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试连接到WiFi
没有Internet Connection
输入的是这样的:
D/Network? Internet YAY
D/Network? Internet YAY
D/Network? Internet YAY
D/RequiresLoginBroadcast? 1 //this occurs sometimes …
Run Code Online (Sandbox Code Playgroud) 我有一个Android应用程序,它有一个webview.当没有互联网连接时,webview将显示页面不可用.我希望尽可能让它看起来像一个应用程序,所以我不想显示这个页面.我在网上找到了一些有用的信息,教你如何隐藏或加载其他内容来覆盖它,但我真正想要的是留在当前页面和一个小弹出对话框说没有连接.基本上,当用户点击webview中的任何内容时,首先检查连接.如果没有连接,请保持原状并弹出一个对话框.
谢谢您的帮助!!
编辑:
就像我说的,我已经知道如何从在线样本检查互联网连接.我的问题是我不知道如何停止加载下一页.需要说明的是,当用户尝试转到下一页时,请检查是否存在互联网连接.如果没有连接,页面将保持原样,不会进入下一页.我希望用户能够看到他们上次加载的页面,并在网页内容仍然存在时获得通知.谢谢!
这就是我想做的事情:
=>如果WiFi已启用且处于活动状态,则启动一个意图(实际上它是一个获取其内容的WebView =>我在网络上的应用程序的说明)
=>如果不是,那么我会启动另一个意图,这样我就不会显示WebView"Web页面不可用... http://www.mywebsite.com上的网页可能暂时关闭或者可能有感动..."
我最初打算使用
如果(wifi.isWifiEnabled())
但这并没有说明Wifi连接是否为ACTIVE.它只表示用户已打开开关.设备可能连接也可能没有连接......这是正确的吗?
然后我试着用:
if(wifi.getConnectionInfo().getSSID()!= null)
但我注意到它返回一个字符串,即使连接已丢失或被禁用...?
那我该怎么办?
wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
Intent intent_instructions;
if (wifi.getConnectionInfo().getSSID()!= null){
Log.i("Hub", "WiFi is enabled AND active !");
Log.i("Hub", "SSID = "+wifi.getConnectionInfo().getSSID());
intent_instructions = new Intent(this, Instructions.class);
}else{
Log.i("Hub", "NO WiFi");
intent_instructions = new Intent(this, Instructions_No_WiFi.class);
}
this.startActivity(intent_instructions);
Run Code Online (Sandbox Code Playgroud)
是否有更通用的方法来测试设备是否在启动意图之前连接到互联网?无论是通过Wifi,3G等...
在此先感谢您的帮助.
我正在为物联网设备编写Android应用程序.我必须给设备WiFi用户名和密码,所以我使用Android应用程序来做到这一点.我有以下代码,但似乎总是连接到网络天气或没有给出正确的密码.
这是我在手机连接的同一个AP上测试的.
期望的行动是
断开与当前AP的连接 - >尝试使用给定的凭据进行连接 - >重新连接到原始网络.
我需要采取哪些步骤才能正确验证wifi网络和密码?
代码:
WifiConfiguration conf = new WifiConfiguration();
conf.SSID = "\"" + ssid + "\"";
for(ScanResult sr: wifiList){
if(sr.SSID.equals(ssid)){
if(sr.capabilities.contains("WEP")){
if(isNumeric(pass)){
conf.wepKeys[0] = pass ;
}else{
conf.wepKeys[0] = "\"" + pass + "\"";
}
conf.wepTxKeyIndex = 0;
conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
}else if(sr.capabilities.contains("PSK")){
conf.preSharedKey = "\""+ pass +"\"";
}else if(sr.capabilities.contains("EAP")){
wifiName.setError("EAP networks not supported");
//todo support EAP
}else{
conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
}
WifiManager wifiManager = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE);
wifiManager.addNetwork(conf);
List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
for( WifiConfiguration i : list …
Run Code Online (Sandbox Code Playgroud) 无论如何我们可以检查Android设备是否只是WiFi?例如,Nexus 7具有仅WiFi设备和WiFi和3G设备.
我正在开发一个应用程序,我担心用户之间可以传输的数据量。由于一些用户的移动数据计划有限,而有些则没有,我想知道是否可以开发一个开关来禁用特定应用程序的移动数据。有点像Android自己的数据使用情况->移动->应用程序->“限制后台数据”可以...
它说(并且确实)说“它仅禁用移动数据网络上的后台数据。如果有Wi-Fi,将使用Wi-Fi。”,我希望这样做,但不仅限于后台。
我确实知道我无法更改“限制后台数据”选项,因为如果应用程序可以取消切换它,它将变得毫无用处...但是有一种方法可以让我以编程方式说现在我的应用程序被禁止访问移动数据,现在不是吗?
作为我为什么要这么做的见解,当用户选择一个给定的选项(我做到了并且可行)时,我尝试不拨打远程访问电话,但是我似乎无法阻止某些数据泄漏(每天大约kbs) ...由于系统保持http连接或其他一些晦涩的原因...
我在eclipse上的应用程序的网络统计数据上以DDMS的角度看到了这些数据传输。
谢谢你的帮助
我想知道哪种方法可以精确地检查网络状态以成功建立连接。
我是否可以检查无线是否已启用,即使未连接到任何网络也是如此.我需要启用无线功能才能获得更准确的GPS读数.但我不需要承认任何网络(除非wi-fi处于活动状态,否则设备无法使用网络进行定位).对于数据传输,我将使用移动网络.
那么,如何检查无线是否被激活?
我想我的Android设备连接到wifi热点.我创建了一个新的wificonfiguration
并将其添加到wifimanager
,这wificonfiguration
有NetworkId
.然后我调用该函数wifi.enableNetwork(NetworkId, true).
在那之后,我认为请求者将通过获取IP地址,身份验证,并最终物理连接到热点.那么有没有办法确定wifi是否物理连接?
我更喜欢类似处理程序的方法.
我正在尝试使用java和xml开发一个Android应用程序,我想要一些指导如何确定应用程序所在的手机上是否启用了wifi.任何帮助,将不胜感激.我尝试过使用这些方法,但是他们都没有检测到我的wifi端口是否正确打开或关闭.我担心这些方法已经过时了.有没有人有最新的方法?
//determine if wifi is enabled
//1st try
wifi =Settings.Secure.getInt(cr, Settings.Secure.WIFI_ON);
//second try
wifi=Settings.Global.getInt(cr, Settings.Global.WIFI_ON, 0);
//3rd try
WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
if (wifi.isWifiEnabled()){
//wifi is enabled
wifiInt=1;
}
else
wifiInt=0;
Run Code Online (Sandbox Code Playgroud) android ×13
wifi ×5
android-wifi ×4
java ×2
networking ×2
connection ×1
iot ×1
isenabled ×1
networkinfo ×1
position ×1
status ×1
webview ×1
wifimanager ×1
wireless ×1