使用广播监听网络状况

使用广播实时监听广播

使用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() {
		@Override
		public 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();
				}
			}
		}
	};

	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}

	@Override
	public void onCreate() {
		super.onCreate();
		dialogBuilder = NiftyDialogBuilder.getInstance(this);
		IntentFilter mFilter = new IntentFilter();
		mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
		registerReceiver(mReceiver, mFilter);// 绑定广播
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		unregisterReceiver(mReceiver);// 注销广播
	}

	@Override
	public 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() {
					@Override
					public void onClick(View v) {
						Toast.makeText(v.getContext(), "请打开蓝牙",
								Toast.LENGTH_SHORT).show();
						dialogBuilder.dismiss();
						
					}
				}).setButton2Click(new View.OnClickListener() {
					@Override
					public void onClick(View v) {
						dialogBuilder.dismiss();

					}
				}).show();

	}

}
这里面的对话框是GitHub上的对话框;

在Activity去开启服务就好了:

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

@Override
	protected 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;
	}
	@Override
	public 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;
	@Override
	protected 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();
		}
		
	}
	@Override
	public void onDestroy() {
		super.onDestroy();
		unregisterReceiver(mNetRevice);// 注销广播
	}

}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值