我想在启动登录界面的时候监听网络状态的变化,我的代码如下:
public class LoginActivity extends Activity {
InternetListener.IntenetBinder binder;
private ServiceConnection conn = new ServiceConnection() { @Override
public void onServiceDisconnected(ComponentName name) {
binder = null;
} @Override
public void onServiceConnected(ComponentName name, IBinder service) {
binder = (IntenetBinder) service;
}
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_load);
final Intent intent = new Intent(this, InternetListener.class);
bindService(intent, conn, Service.BIND_AUTO_CREATE);//绑定service
NetworkInfo info = binder.getNetStatus();
if (info != null && info.isAvailable()) {
new BaiDuOpenAPI().login(this);
}
}}
这个是activity类public class InternetListener extends Service {
private ConnectivityManager connectivityManager;
private NetworkInfo info;
private IntenetBinder binder = new IntenetBinder();
private BroadcastReceiver receiver = new BroadcastReceiver() { @Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
info = connectivityManager.getActiveNetworkInfo();
if (info != null && info.isAvailable()) {
String name = info.getTypeName();
Log.d("", "当前网络名称:" + name);
} else {
Log.d("", "没有可用网络");
}
}
} }; public class IntenetBinder extends Binder {
/**
* 返回网络状态
*
* @return
*/
public NetworkInfo getNetStatus() {
return info;
}
} @Override
public IBinder onBind(Intent intent) {
return binder;
} @Override
public void onCreate() {
super.onCreate();
IntentFilter mFilter = new IntentFilter();
mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
// registerReceiver(receiver, mFilter);
} @Override
public void onDestroy() {
unregisterReceiver(receiver);
} @Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId); }
}这个是service类但是在实际的尝试中绑定service没有反应,始终不能进去service的onCreate()方法,我也查了Android的官方文档还是不得其解。求各位同仁帮忙看看问题出在那。
public class LoginActivity extends Activity {
InternetListener.IntenetBinder binder;
private ServiceConnection conn = new ServiceConnection() { @Override
public void onServiceDisconnected(ComponentName name) {
binder = null;
} @Override
public void onServiceConnected(ComponentName name, IBinder service) {
binder = (IntenetBinder) service;
}
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_load);
final Intent intent = new Intent(this, InternetListener.class);
bindService(intent, conn, Service.BIND_AUTO_CREATE);//绑定service
NetworkInfo info = binder.getNetStatus();
if (info != null && info.isAvailable()) {
new BaiDuOpenAPI().login(this);
}
}}
这个是activity类public class InternetListener extends Service {
private ConnectivityManager connectivityManager;
private NetworkInfo info;
private IntenetBinder binder = new IntenetBinder();
private BroadcastReceiver receiver = new BroadcastReceiver() { @Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
info = connectivityManager.getActiveNetworkInfo();
if (info != null && info.isAvailable()) {
String name = info.getTypeName();
Log.d("", "当前网络名称:" + name);
} else {
Log.d("", "没有可用网络");
}
}
} }; public class IntenetBinder extends Binder {
/**
* 返回网络状态
*
* @return
*/
public NetworkInfo getNetStatus() {
return info;
}
} @Override
public IBinder onBind(Intent intent) {
return binder;
} @Override
public void onCreate() {
super.onCreate();
IntentFilter mFilter = new IntentFilter();
mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
// registerReceiver(receiver, mFilter);
} @Override
public void onDestroy() {
unregisterReceiver(receiver);
} @Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId); }
}这个是service类但是在实际的尝试中绑定service没有反应,始终不能进去service的onCreate()方法,我也查了Android的官方文档还是不得其解。求各位同仁帮忙看看问题出在那。
解决方案 »
- 异步加载 重定向出问题求大神帮助
- android 关于gps状态改变 能触发什么广播
- 一个activity中的多个view怎么分别响应触摸事件
- 求助,关于双卡安卓手机获取SIM卡上的imsi码信息的方法
- 点击android桌面的应用程序图标 弹出列表 如何实现? 谢谢
- 关于ExpandableListView和其它组件整合的页面布局
- android 动态tablelayout 布局对某一列的监听
- android开发时eclipse报错看不懂求指导
- 请问关于蓝牙获取远端蓝牙设备的问题
- 关于settings设置修改问题,求大神搭救!!
- 安卓手机1G内存和2G内存,对速度影响大吗?
- ListView的背景重叠
动态使用IntentFilter 在登陆的时候注册 登陆完了看你需要可以在适当的时候取消注册
</service>这个是我注册的service ,这样写有没有问题?
明白你的意思 但是我就是想练习使用service组件哈,谢谢你的回复。我调试了半天感觉我的写的没有错误不知道为啥绑定始终不成功。
明白你的意思 但是我就是想练习使用service组件哈,谢谢你的回复。我调试了半天感觉我的写的没有错误不知道为啥绑定始终不成功。
你的Service有点诡异啊 你使用了Binder 那你的Service应该继承是用aidl编译生成的service接口啊
你这种直接使用startService stopService也可以啊
网络权限加了没有?
@Override
public IBinder onBind(Intent intent) {
return new IntenetBinder ();
}
public class IntenetBinder extends Binder {
/**
* 返回网络状态
*
* @return
*/
public InternetListener getService() {
return new IntenetBinder();
}
} private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
binder = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
(IntenetBinder) service.getService();
}
};getNetStatus()应该是service的方法,而不是binder的方法;
明白你的意思 但是我就是想练习使用service组件哈,谢谢你的回复。我调试了半天感觉我的写的没有错误不知道为啥绑定始终不成功。
你的Service有点诡异啊 你使用了Binder 那你的Service应该继承是用aidl编译生成的service接口啊
你这种直接使用startService stopService也可以啊 不对吧 aidl是跨进程调用 我是调用本地的service,让activity和service 通信,startService 做不到吧?
兄弟 getNetStatus 这个方法是我自己写的啊 我是继承binder 然后加入的这个方法 ,怎么成了service 的方法呢?
service 注册了没有重复绑定 绑定的代码都贴出来了。
这个权限加了哈
明白你的意思 但是我就是想练习使用service组件哈,谢谢你的回复。我调试了半天感觉我的写的没有错误不知道为啥绑定始终不成功。
你的Service有点诡异啊 你使用了Binder 那你的Service应该继承是用aidl编译生成的service接口啊
你这种直接使用startService stopService也可以啊 不对吧 aidl是跨进程调用 我是调用本地的service,让activity和service 通信,startService 做不到吧?
...startService 可以
没有错啊 兄弟 哪位大神帮我看看啊?如果service没起来一般都会有报错的吧
或者你试下加点log或者直接用单步调试看看走到哪里了
没有错啊 兄弟 哪位大神帮我看看啊?如果service没起来一般都会有报错的吧
或者你试下加点log或者直接用单步调试看看走到哪里了真的没有报错,启动service的哪一步正常走过,但是就是没有起动起来