使用广播监听网络状况

来源:互联网 发布:编程开发 编辑:程序博客网 时间:2024/05/18 03:19

使用广播实时监听广播

使用Service后台绑定一个广播然后实时监听网络状况

写一个Service

import com.gitonway.lee.niftymodaldialogeffects.lib.Effectstype;import com.gitonway.lee.niftymodaldialogeffects.lib.NiftyDialogBuilder;import android.app.Service;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.os.IBinder;import android.util.Log;import android.view.View;import android.widget.Toast;public class NetService extends Service {private ConnectivityManager connectivityManager;private NetworkInfo info;private NiftyDialogBuilder dialogBuilder;private Effectstype effect;private BroadcastReceiver mReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {Log.d("mark", "网络状态已经改变");connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);info = connectivityManager.getActiveNetworkInfo();if (info != null && info.isAvailable()) {String name = info.getTypeName();Log.d("mark", "当前网络名称:" + name);Toast.makeText(getApplicationContext(), name, 0).show();} else {Log.d("mark", "没有可用网络");Toast.makeText(getApplicationContext(), "无网络", 0).show();showDiaog();}}}};@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();dialogBuilder = NiftyDialogBuilder.getInstance(this);IntentFilter mFilter = new IntentFilter();mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);registerReceiver(mReceiver, mFilter);// 绑定广播}@Overridepublic void onDestroy() {super.onDestroy();unregisterReceiver(mReceiver);// 注销广播}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {return super.onStartCommand(intent, flags, startId);}public void showDiaog() {dialogBuilder.withTitle("Modal Dialog")// .withTitle(null) no title.withTitleColor("#FFFFFF")// def.withDividerColor("#11000000")// def.withMessage("无网络" +"是否切换为蓝牙?")// .withMessage(null) no Msg.withMessageColor("#FFFFFF")// def.withIcon(getResources().getDrawable(R.drawable.icon)).isCancelableOnTouchOutside(true) // def | isCancelable(true).withDuration(700) // def.withEffect(effect) // def Effectstype.Slidetop.withButton1Text("OK") // def gone.withButton2Text("Cancel") // def gone.setButton1Click(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(v.getContext(), "请打开蓝牙",Toast.LENGTH_SHORT).show();dialogBuilder.dismiss();}}).setButton2Click(new View.OnClickListener() {@Overridepublic void onClick(View v) {dialogBuilder.dismiss();}}).show();}}
这里面的对话框是GitHub上的对话框;

在Activity去开启服务就好了:

Intent intent = new Intent(MainActivity.this, NetService.class);startService(intent);
如果只是停止这个Activity,然后在onstop中去关闭服务

@Overrideprotected void onStop() {super.onStop();stopService(intent);}
这个样就可以后台去监听网络状况了

如果只是使用广播去判断网络呢?工具类先不说:

定义一个广播

public class NetRevice extends BroadcastReceiver {private ConnectivityManager connectivityManager;private NetworkInfo info;private Context context;public static int conn;public static String name;public NetRevice(Context context) {this.context = context;}@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {Log.d("mark", "网络状态已经改变");connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);info = connectivityManager.getActiveNetworkInfo();if (info != null && info.isAvailable()) {name = info.getTypeName();Log.d("mark", "当前网络名称:" + name);//Toast.makeText(context, name, 0).show();conn=0;} else {Log.d("mark", "没有可用网络");//Toast.makeText(context, "无网络",1).show();conn=1;}}}}
然后在Activity中:

public class MainActivity extends Activity {private NetRevice mNetRevice;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mNetRevice = new NetRevice(getApplicationContext());IntentFilter mFilter = new IntentFilter();mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);registerReceiver(mNetRevice, mFilter);// 绑定广播System.out.println("----->>>"+NetRevice.conn);if(NetRevice.conn==0){Toast.makeText(getApplicationContext(), NetRevice.name, 0).show();}if(NetRevice.conn==1){Toast.makeText(getApplicationContext(), "无网络", 0).show();}}@Overridepublic void onDestroy() {super.onDestroy();unregisterReceiver(mNetRevice);// 注销广播}}






0 0
原创粉丝点击