使用广播实时监听广播
使用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);// 注销广播
}
}