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

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

2013-07-30 11:07 239 查看
有的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);

                      

    }

  

希望对大家有所帮助!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  BroadCast 断网 ANDROID
相关文章推荐