您的位置:首页 > 移动开发 > Android开发

Android应用程序中用Broadcast来监测"断网",并进行相应处理

2015-07-20 17:47 721 查看
有的Android应用程序有“联网”和“断网”两种连接方式,“断网”和“联网”有两种不同的界面,”断网“情况下调用断网的API,“联网”情况下调用“联网”的API,如果“断网”情况下调用联网的API,就会出现异常。应该是“联网”情况下如果断网,应该就应该调到“断网”的界面,并调用“断网”情况下的API。

1.能够检测网络,首先具有如下权限(访问网络的权限和访问网络状态的权限):

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

2.在Manifest中配置BroadReceiver监测断网,action里面是网络连接变化时候来触发这个Receiver,如下所示:

<receiver

android:name=".ConnectionChangeReceiver"

android:label="NetworkConnection" >

<intent-filter>

<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

</intent-filter>

</receiver>

3.BroadcastReceiver的实现代码如下:

public class ConnectionChangeReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

ConnectivityManager connectivity = (ConnectivityManager) context

.getSystemService(Context.CONNECTIVITY_SERVICE);

if (connectivity != null) {

NetworkInfo[] info = connectivity.getAllNetworkInfo();

if (info != null) {

for (int i = 0; i < info.length; i++) {

if (info[i].getState() == NetworkInfo.State.CONNECTED) {

//如果有网络连接中就直接退出

return;

}

}

}

}

//如果没有网络连接(网络已经断开)就采取相应的逻辑,跳到相应的界面。

SharedPreferences settings = context.getSharedPreferences(

Constant.PREFS_NAME, Context.MODE_PRIVATE);

SharedPreferences.Editor editor = settings.edit();

editor.putBoolean(Constant.PREFS_NETWORK_ONLINE, false);

editor.commit();

intent.setClass(context, NetworkListActivity.class);

//在BroadcastReceiver(或者像Service那些没有界面的Android组件)中启动Activity,应该设置FLAG_ACTIVITY_NEW_TASK标记。

//清除所有的Activity,应该设置FLAG_ACTIVITY_CLEAR_TOP标记。

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(intent);



}

多谢 abcdefh123的专栏 分享。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: