network: android 使用广播监听网络状态

原文:http://blog.csdn.net/androidbluetooth/article/details/7199708

package mark.zhang;

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 ListenNetStateService extends Service {
    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("mark", "网络状态已经改变");
                connectivityManager = (ConnectivityManager)      

                                         getSystemService(Context.CONNECTIVITY_SERVICE);
                info = connectivityManager.getActiveNetworkInfo();  
                if(info != null && info.isAvailable()) {
                    String name = info.getTypeName();
                    Log.d("mark", "当前网络名称:" + name);
                } else {
                    Log.d("mark", "没有可用网络");
                }
            }
        }
    };

    @Override
    public IBinder onBind(Intent intent) {
        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);
    }
}

在 manifest 文件中需要加上一条权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

回头再看看关于 CONNECTIVITY_ACTION 的介绍,从 api 中,我们还可以得到一个信息:

通过 intent 可以获取一些 EXTRA,如 EXTRA_NO_CONNECTIVITY。


boolean b = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, true);


更多信息可以参考 ConnectivityManager.



以上 转至http://blog.csdn.net/androidbluetooth/article/details/7199708


总结:

后台服务中注册广播,广播filter.action:ConnectivityManager.CONNECTIVITY_ACTION(android.net.conn.CONNECTIVITY_CHANGE)

动态在service中注册广播,后台service 运行时,用户可以在【设置】中关闭服务,进而停止广播;
如果是在Mainfest中注册广播,每次网络连接变化时,应用会接收广播,app进程会自行启动,用户无法彻底停止应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值