
android用broadcastreceiver监听网络
若网络断开则弹出对话框,提示网络断开,并让用户选择是否打开网络设置,用户选择“确定”,打开网络设置。需要源码!!!...
若网络断开则弹出对话框,提示网络断开,并让用户选择是否打开网络设置,用户选择“确定”,打开网络设置。需要源码!!!
展开
2个回答
推荐于2016-09-03 · 知道合伙人软件行家
关注

展开全部
采用Service+BroadcastReceiver的形式实时监听网络变化。
原理是程序在背后启一个Service,在Service中注册一个广播,当网络变化时会产生一个ConnectivityManager.CONNECTIVITY_ACTION事件,只要监听这个事件就可以了。JAVA代码如下:
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;
public class NetworkStateService extends Service{
private static final String tag="tag";
private ConnectivityManager connectivityManager;
private NetworkInfo info;
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(tag, "网络状态已经改变");
connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
info = connectivityManager.getActiveNetworkInfo();
if(info != null && info.isAvailable()) {
String name = info.getTypeName();
Log.d(tag, "当前网络名称:" + name);
//doSomething()
} else {
Log.d(tag, "没有可用网络");
//doSomething()
}
}
}
};
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
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);
}
}
别忘了在Manifast中配置这个Service:
Xml代码 收藏代码
<service android:enabled="true" android:name="com.reyo.util.NetworkStateService" />
还有权限:
Xml代码 收藏代码
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在必要的地方启动该Service即可:
Java代码 收藏代码
Intent i=new Intent(context,NetworkStateService.class);
startService(i);
原理是程序在背后启一个Service,在Service中注册一个广播,当网络变化时会产生一个ConnectivityManager.CONNECTIVITY_ACTION事件,只要监听这个事件就可以了。JAVA代码如下:
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;
public class NetworkStateService extends Service{
private static final String tag="tag";
private ConnectivityManager connectivityManager;
private NetworkInfo info;
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(tag, "网络状态已经改变");
connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
info = connectivityManager.getActiveNetworkInfo();
if(info != null && info.isAvailable()) {
String name = info.getTypeName();
Log.d(tag, "当前网络名称:" + name);
//doSomething()
} else {
Log.d(tag, "没有可用网络");
//doSomething()
}
}
}
};
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
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);
}
}
别忘了在Manifast中配置这个Service:
Xml代码 收藏代码
<service android:enabled="true" android:name="com.reyo.util.NetworkStateService" />
还有权限:
Xml代码 收藏代码
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在必要的地方启动该Service即可:
Java代码 收藏代码
Intent i=new Intent(context,NetworkStateService.class);
startService(i);

2023-07-25 广告
StormProxies是一家可靠的代理服务提供商,提供原生IP(住宅原生IP)和高匿名代理服务。以下是关于StormProxies的原生IP服务的一些信息:1. 住宅原生IP:StormProxies提供的住宅原生IP是指从真实的家庭或企...
点击进入详情页
本回答由Storm代理提供
展开全部
这个网上已经有好多demo了,给你找了2个,结合起来就行了。
http://www.cnblogs.com/sipher/articles/2567697.html
http://blog.csdn.net/wangjia55/article/details/7924664
http://www.cnblogs.com/sipher/articles/2567697.html
http://blog.csdn.net/wangjia55/article/details/7924664
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询