Activity提示網路狀態變化
阿新 • • 發佈:2019-02-16
實現效果
在網路狀態不可用的時候,在Activity的頂端顯示提示資訊,在網路可用時提示消失。效果圖
實現方式
首先需要實現一個網路狀態變化的廣播:上面程式碼裡接收網路狀態變化的廣播,並將它通知到Activity中。這樣,只需要在Activity裡接收這個通知就可以了。 Activity:public class NetworkReceiver extends BroadcastReceiver implements Observable{ private static List<Observer> observers = new ArrayList<Observer>(); private int state = 0; @Override public void onReceive(Context context, Intent intent) { state = checkNetworkInfo(context); notifyObserver(); } public static int checkNetworkInfo(Context context) { ConnectivityManager conMan = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo.State mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState(); NetworkInfo.State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState(); if (mobile == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTED) return 1; if (mobile == NetworkInfo.State.CONNECTING || wifi == NetworkInfo.State.CONNECTING) return 0; return -1; } @Override public void registerObserver(Observer o) { observers.add(o); } @Override public void unregisterObserver(Observer o) { observers.remove(o); } @Override public void notifyObserver() { for(Observer o : observers){ o.update(state); } } }
在Activity裡註冊廣播,可以在onStart裡註冊,新增提示網路狀態的view(這一步可以直接使用xml佈局檔案,此處是為了方便以後直接使用,使用Java程式碼建立佈局)。public void needNetworkState(boolean isNeed, int netResId, int nextResId) { if (isNeed) { receiver = new NetworkReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); registerReceiver(receiver, filter); receiver.registerObserver(this); draw(netResId, nextResId); if (NetworkReceiver.checkNetworkInfo(this) < 0) { netState.setVisibility(View.VISIBLE); } else { netState.setVisibility(View.GONE); } } }
建立提示欄的點選事件,跳轉到系統設定頁面:
Intent intent = new Intent(Settings.ACTION_SETTINGS);
startActivity(intent);
最後,接收來自廣播的通知:
@Override public void update(Object object) { <span style="white-space:pre"> </span>// TODO Auto-generated method stub if((Integer)object < 0){ netState.setVisibility(View.VISIBLE); } else { netState.setVisibility(View.GONE); } }
</pre><pre name="code" class="java">我把這一操作整合到NetworkChangeActivity中
public class NetworkChangeActivity extends Activity implements Observer
這樣,直接繼承NetworkChangeActivity即可:
public class MainActivity extends NetworkChangeActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
needNetworkState(true, R.mipmap.wifi, R.mipmap.right_arrow);
}
}