// 获取代表联网状态的NetWorkInfo对象 NetworkInfo networkInfo = connManagergetActiveNetworkInfo();
// 获取当前的网络连接是否可用 if (null == networkInfo){ToastmakeText(this, "当前的网络连接不可用", ToastLENGTH_SHORT)show();
//当网络不可用时,跳转到网络设置页面 startActivityForResult(new Intent(
androidproviderSettingsACTION_WIRELESS_SETTINGS), 1);} else {boolean available = networkInfoisAvailable();
if (available){Logi("通知", "当前的网络连接可用");
ToastmakeText(this, "当前的网络连接可用", ToastLENGTH_SHORT)show();} else {Logi("通知", "当前的网络连接不可用");
ToastmakeText(this, "当前的网络连接不可用", ToastLENGTH_SHORT)show();}}State state = connManagergetNetworkInfo(
ConnectivityManagerTYPE_MOBILE)getState();
if (StateCONNECTED == state){Logi("通知", "GPRS网络已连接");
ToastmakeText(this, "GPRS网络已连接", ToastLENGTH_SHORT)show();}state = connManagergetNetworkInfo(ConnectivityManagerTYPE_WIFI)
getState();
if (StateCONNECTED == state){Logi("通知", "WIFI网络已连接");
ToastmakeText(this, "WIFI网络已连接", ToastLENGTH_SHORT)show();}//// 跳转到无线网络设置界面
// startActivity(new
// Intent(androidproviderSettingsACTION_WIRELESS_SETTINGS));
//// 跳转到无限wifi网络设置界面
// startActivity(new
// Intent(androidproviderSettingsACTION_WIFI_SETTINGS)); }也可以:
privatevoid testConnectivityManager(){ConnectivityManager conMan = (ConnectivityManager) getSystemService(ContextCONNECTIVITY_SERVICE);
//mobile 3G Network State mobile = conMangetNetworkInfo(ConnectivityManagerTYPE_MOBILE)getState();
Logd(mobiletoString());
//wifi Network State wifi = conMangetNetworkInfo(ConnectivityManagerTYPE_WIFI)getState();
Logd(wifitoString());
//如果3G网络和wifi网络都未连接,且不是处于正在连接状态 则进入Network Setting界面 由用户配置网络连接if(mobile==StateCONNECTED||mobile==StateCONNECTING)return;if(wifi==StateCONNECTED||wifi==StateCONNECTING)return;startActivity(new Intent(SettingsACTION_WIRELESS_SETTINGS));//进入无线网络配置界面
//startActivity(new Intent(SettingsACTION_WIFI_SETTINGS)); //进入手机中的wifi网络设置界面 }
获取网络信息需要在AndroidManifestxml文件中加入相应的权限。
<uses-permission android:name="androidpermissionACCESS_NETWORK_STATE" />
1)判断是否有网络连接
1 public boolean isNetworkConnected(Context context) {
2 if (context != null) {
3 ConnectivityManager mConnectivityManager = (ConnectivityManager) context
4 getSystemService(ContextCONNECTIVITY_SERVICE);
5 NetworkInfo mNetworkInfo = mConnectivityManagergetActiveNetworkInfo();
6 if (mNetworkInfo != null) {
7 return mNetworkInfoisAvailable();
8 }
9 }
10 return false;
11 }
>
Android开发中,常常需要获取本地或者网络多媒体的一些基本信息。MediaMetadataRetriever类位于androidmedia包下,提供了用于从输入媒体文件检索帧和元数据的统一接口,可以很方便实现这些功能。
本例中提供了获取本地视频和网络视频第一帧的功能,首先初始化MediaMetadataRetriever,如果是本地视频设置数据源时通过 UrifromFile()转化为Uri对象,再通过MediaMetadataRetriever的getFrameAtTime()方法默认获取第一帧。如果是网络视频直接将url设置为数据源即可。
很多时候我们都需要实时监听网络状态,当网络状态发生变化之后立即通知程序进行不同的 *** 作。
监听广播的两种方式:
(1)在AndroidManifestxml配置文件中声明
<receiver android:name="NetworkConnectChangedReceiver" >
<intent-filter>
<action android:name="androidnetconnCONNECTIVITY_CHANGE" />
<action android:name="androidnetwifiWIFI_STATE_CHANGED" />
<action android:name="androidnetwifiSTATE_CHANGE" />
</intent-filter>
</receiver>1234567
(2)在代码中注册
IntentFilter filter = new IntentFilter(); filteraddAction(WifiManagerWIFI_STATE_CHANGED_ACTION); filteraddAction(WifiManagerNETWORK_STATE_CHANGED_ACTION); filteraddAction(ConnectivityManagerCONNECTIVITY_ACTION);
registerReceiver(new NetworkConnectChangedReceiver(), filter);12345
接下来创建实时监听网络连接与断开状态变化的BroadcastReceiver对象,我们需要继承androidcontentBroadcastReceiver,并实现其onReceive方法,下面我们就创建一个名为NetworkConnectChangedReceiver广播接收者,看一下具体的实现代码,由于代码写得很详细,就不一一解释了
package compernetworkconnectdome;import androidcontentBroadcastReceiver;import androidcontentContext;import androidcontentIntent;import androidnetConnectivityManager;import androidnetNetworkInfo;import androidnetwifiWifiManager;import androidosParcelable;import androidutilLog;public class NetworkConnectChangedReceiver extends BroadcastReceiver {
private String getConnectionType(int type) {
String connType = ""; if (type == ConnectivityManagerTYPE_MOBILE) {
connType = "3G网络数据";
} else if (type == ConnectivityManagerTYPE_WIFI) {
connType = "WIFI网络";
} return connType;
} @Override
public void onReceive(Context context, Intent intent) { if (WifiManagerWIFI_STATE_CHANGED_ACTIONequals(intentgetAction())) {// 监听wifi的打开与关闭,与wifi的连接无关
int wifiState = intentgetIntExtra(WifiManagerEXTRA_WIFI_STATE, 0);
Loge("TAG", "wifiState:" + wifiState); switch (wifiState) { case WifiManagerWIFI_STATE_DISABLED: break; case WifiManagerWIFI_STATE_DISABLING: break;
}
} // 监听wifi的连接状态即是否连上了一个有效无线路由
if (WifiManagerNETWORK_STATE_CHANGED_ACTIONequals(intentgetAction())) {
Parcelable parcelableExtra = intent
getParcelableExtra(WifiManagerEXTRA_NETWORK_INFO); if (null != parcelableExtra) { // 获取联网状态的NetWorkInfo对象
NetworkInfo networkInfo = (NetworkInfo) parcelableExtra; //获取的State对象则代表着连接成功与否等状态
NetworkInfoState state = networkInfogetState(); //判断网络是否已经连接
boolean isConnected = state == NetworkInfoStateCONNECTED;
Loge("TAG", "isConnected:" + isConnected); if (isConnected) {
} else {
}
}
} // 监听网络连接,包括wifi和移动数据的打开和关闭,以及连接上可用的连接都会接到监听
if (ConnectivityManagerCONNECTIVITY_ACTIONequals(intentgetAction())) { //获取联网状态的NetworkInfo对象
NetworkInfo info = intent
getParcelableExtra(ConnectivityManagerEXTRA_NETWORK_INFO); if (info != null) { //如果当前的网络连接成功并且网络连接可用
if (NetworkInfoStateCONNECTED == infogetState() && infoisAvailable()) { if (infogetType() == ConnectivityManagerTYPE_WIFI
|| infogetType() == ConnectivityManagerTYPE_MOBILE) {
Logi("TAG", getConnectionType(infogetType()) + "连上");
}
} else {
Logi("TAG", getConnectionType(infogetType()) + "断开");
}
}
}
}
}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
在onReceive方法里面,我们可以获取从广播而来的Intent中的数据,这包含很多有用的信息,其中
ConnectivityManager : 主要管理和网络连接相关的 *** 作
WifiManager: 管理和wifi相关的信息
TelephonyManager: 管理和手机、运营商等的相关信息
NetworkInfo类包含了对wifi和mobile两种网络模式连接的详细描述,通过getState()方法获取的State对象,代表着连接成功与否的状态。
最后记得添加权限:
<uses-permission android:name="androidpermissionaccess_wifi_state" /><uses-permission android:name="androidpermissionaccess_network_state" />
获取android系统的连接服务可判断网络连接状态,代码如下
public class NetUtils{
public static boolean isNetworkConnected(Context context){
ConnectivityManager mConnectivityManager = (ConnectivityManager) contextgetSystemService(ContextCONNECTIVITY_SERVICE);
NetworkInfo[] infos = cmgetAllNetworkInfo();
for(NetworkInfo info:infos){
if(infoisAvailable()&&infoisConnected()){
return true;
}
}
return false;
}
}
NetworkInfo的isAvailable()和isConnected()有以下5种状态:
在WLAN设置界面
1,显示连接已保存,但标题栏没有,即没有实质连接上:isConnected()==false,isAvailable()=true
2,显示连接已保存,标题栏也有已连接上的图标:isConnected()==true,isAvailable()=true
3,选择不保存后:isConnected()==false,isAvailable()=true
4,选择连接,在正在获取IP地址时:isConnected()==false,isAvailable()=false
5,连接上后:isConnected()==true,isAvailable()=true
以上就是关于android 能判断当前网络是否连接,连接的是 wifi 还是 3g/4g全部的内容,包括:android 能判断当前网络是否连接,连接的是 wifi 还是 3g/4g、android 检测是否有网络连接、Android多媒体信息获取等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)