Android实时监控网络状态
16lz
2021-01-26
如同qq等一些软件,当我们的网络发生变化,那么就会给出响应的提示,那么怎么做到这样的实时监控网络的功能呢?这其实使用到的是Android中4大组件中的广播接收者(BroadcastReceiver),其他的就不多废话了,下面用具体代码来实现
public static AlertDialog.Builder showDialog(final Context context,String title,String message,final String action){//创建AlertDialogAlertDialog.Builder builder=new Builder(context);//设置标题builder.setTitle(title);//设置信息builder.setMessage(message);//确定按钮builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {context.startActivity(new Intent(action));}});//取消按钮builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});return builder;}
这个方法没什么别的,只是一个弹出的对话框,只不过我用一个方法单独抽取出来,方便使用
public class MainActivity extends Activity {//声明网络管理类private ConnectivityManager manager;//声明网络信息private NetworkInfo info;private Handler handler=new Handler(){public void handleMessage(android.os.Message msg) {switch (msg.what) {case 0x11:Dialog.showDialog(MainActivity.this, "提示", "是否需要开启网络?", android.provider.Settings.ACTION_WIRELESS_SETTINGS).create().show();break;case 0x12:Dialog.showDialog(MainActivity.this, "提示", "是否需要开启WIFI网络?", android.provider.Settings.ACTION_WIFI_SETTINGS).create().show();break;default:break;}};};//创建广播机制对象private BroadcastReceiver receiver=new BroadcastReceiver(){@Overridepublic void onReceive(Context context, Intent intent) {if(intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)){//获取网络管理对象manager=(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);//获取网络信息info=manager.getActiveNetworkInfo();if(null!=info&&info.isAvailable()){//判断是否是WIFI网络State state=manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();if(State.CONNECTED==state){Toast.makeText(context, "网络:"+info.getTypeName(), Toast.LENGTH_SHORT).show();}else{handler.sendEmptyMessage(0x12);return;}}else{handler.sendEmptyMessage(0x11);return;}}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//创建Intent过滤器IntentFilter filter=new IntentFilter();//添加网络活动filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);//注册该广播事件registerReceiver(receiver, filter);}@Overrideprotected void onDestroy() {super.onDestroy();//销毁该广播事件unregisterReceiver(receiver);}}
这样就可以实现网络实时监控了,不过有点问题,就是第一次进入的时候,给出提示是提示一次,如果在程序运行时,改变网络,那么就会连续提示几次,因为刚开始学Android,具体是什么原因,还弄不清楚,如果各位解决了这个问题,麻烦各位给在下一个提示,谢谢
更多相关文章
- 检查网络连接状况
- 网络连接和概述
- Android实现开机自启动某个程序
- android studio升级失败提示 Connection failed解决方法
- android网络请求框架Volley(二)
- android studio 混淆打包apk后volley无法访问网络
- Android(安卓)BroadcastReceiver 的生命周期及实际应用
- Android(安卓)FAQ
- andorid中网络图片下载、保存以及在相册中显示