android 能判断当前网络是否连接,连接的是 wifi 还是 3g4g

android 能判断当前网络是否连接,连接的是 wifi 还是 3g4g,第1张

// 获取代表联网状态的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多媒体信息获取等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9570565.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存