我想在启动登录界面的时候监听网络状态的变化,我的代码如下:
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的官方文档还是不得其解。求各位同仁帮忙看看问题出在那。

解决方案 »

  1.   

    网络变化都有现成的广播  你写个类自己去监听麻烦死了
    动态使用IntentFilter   在登陆的时候注册  登陆完了看你需要可以在适当的时候取消注册  
      

  2.   

    没有近onCreate()只能是 你服务启动失败 应该是 没注册吧
      

  3.   

     <service android:name="com.crazy.panassistant.listener.InternetListener" >
            </service>这个是我注册的service ,这样写有没有问题?
      

  4.   


    明白你的意思 但是我就是想练习使用service组件哈,谢谢你的回复。我调试了半天感觉我的写的没有错误不知道为啥绑定始终不成功。
      

  5.   


    明白你的意思 但是我就是想练习使用service组件哈,谢谢你的回复。我调试了半天感觉我的写的没有错误不知道为啥绑定始终不成功。
    你的Service有点诡异啊   你使用了Binder  那你的Service应该继承是用aidl编译生成的service接口啊 
    你这种直接使用startService  stopService也可以啊 
      

  6.   

     <uses-permission android:name="android.permission.INTERNET" />
    网络权限加了没有?
      

  7.   

    错了错了......你。
        @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的方法;
      

  8.   

    service是否注册,是否重复绑定
      

  9.   


    明白你的意思 但是我就是想练习使用service组件哈,谢谢你的回复。我调试了半天感觉我的写的没有错误不知道为啥绑定始终不成功。
    你的Service有点诡异啊   你使用了Binder  那你的Service应该继承是用aidl编译生成的service接口啊 
    你这种直接使用startService  stopService也可以啊 不对吧 aidl是跨进程调用 我是调用本地的service,让activity和service 通信,startService   做不到吧?
      

  10.   


    兄弟 getNetStatus 这个方法是我自己写的啊 我是继承binder 然后加入的这个方法 ,怎么成了service 的方法呢?
      

  11.   


    service 注册了没有重复绑定 绑定的代码都贴出来了。
    这个权限加了哈
      

  12.   

    你看下logcat有没有报错啥的。
      

  13.   


    明白你的意思 但是我就是想练习使用service组件哈,谢谢你的回复。我调试了半天感觉我的写的没有错误不知道为啥绑定始终不成功。
    你的Service有点诡异啊   你使用了Binder  那你的Service应该继承是用aidl编译生成的service接口啊 
    你这种直接使用startService  stopService也可以啊 不对吧 aidl是跨进程调用 我是调用本地的service,让activity和service 通信,startService   做不到吧?
    ...startService 可以 
      

  14.   


    没有错啊  兄弟 哪位大神帮我看看啊?如果service没起来一般都会有报错的吧
    或者你试下加点log或者直接用单步调试看看走到哪里了
      

  15.   


    没有错啊  兄弟 哪位大神帮我看看啊?如果service没起来一般都会有报错的吧
    或者你试下加点log或者直接用单步调试看看走到哪里了真的没有报错,启动service的哪一步正常走过,但是就是没有起动起来