接收一次性广播,开启服务永久监听

简介:   接收一次性广播,开启服务永久监听   出处:http://blog.csdn.net/djy1992/article/details/9629741 需代码留邮箱 如果现在系统只发送一个一次性广播(比如开机启动), 接收器只识别一次,因为系统不继续发送该广播了;...
 

接收一次性广播,开启服务永久监听

 

出处:http://blog.csdn.net/djy1992/article/details/9629741 需代码留邮箱

如果现在系统只发送一个一次性广播(比如开机启动),

接收器只识别一次,因为系统不继续发送该广播了;

现在是要在这种情况下开启服务(开机启动服务),

而且要连续的监听变化(如:网络改变时,该服务启动),该怎么处理?

 

第一步:在manifest注册广播接收器,

 <receiver android:name=".service.ClientUpdateReceiver">
        <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED"/>// 开机启动发送的广播命令 

     <category android:name="android.intent.category.HOME"/>
   </intent-filter>
 </receiver>

第二步:在代码中编写广播接收器,

public class ClientUpdateReceiver extends BroadcastReceiver
{

    @Override
    public void onReceive(Context context, Intent intent)
    {

            Intent i = new Intent();
            i.setAction("zte.com.market.service");
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            context.startService(i);
    }

}

第三步:编写service类,其中需要另外编写一个广播接收器,方便实时接受广播, 

public class UpdateService 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("Jeny", "网络状态已经改变");
              connectivityManager = (ConnectivityManager)      
                                       getSystemService(Context.CONNECTIVITY_SERVICE);
              info = connectivityManager.getActiveNetworkInfo();  
              if(info != null && info.isAvailable()) {
                  String name = info.getTypeName();
                  Log.d("Jeny", "当前网络名称:" + name);
                  Intent i = new Intent();
                  i.setAction("zte.com.market.service");
                  i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                  context.startService(i);// 开启服务
           } else {
                  Log.d("Jeny", "没有可用网络");
              }
          }
      }
  };
    
    @Override
    public IBinder onBind(Intent arg0)
    {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onDestroy()
    {
        // TODO Auto-generated method stub
        super.onDestroy();
        Log.v("Jeny", "[UpdateService]...onDestroy");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        // TODO Auto-generated method stub
              
        ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo mobileInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        NetworkInfo wifiInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        Log.v("Jeny", "mobileInfo.isConnected()------->"+mobileInfo.isConnected()+"   wifiInfo.isConnected()---------->"+wifiInfo.isConnected());
        if(mobileInfo.isConnected() || wifiInfo.isConnected()){
            
         }
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onCreate()
    {
        // TODO Auto-generated method stub
        super.onCreate();
        IntentFilter mFilter = new IntentFilter();
        mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(mReceiver, mFilter);// 开机启动时首次开启服务后注册接收器
     }

}

 

到此结束!

相关文章
|
8月前
|
Ubuntu Linux 数据库
废弃手机别丢弃,秒变8h8g永久服务器
废弃手机别丢弃,秒变8h8g永久服务器
711 0
|
8月前
|
Java 开发者
JavaHTTP心跳:服务器与客户端实时连接的实现方式
JavaHTTP心跳:服务器与客户端实时连接的实现方式 在网络通信中,实时连接是一种至关重要的功能。它允许服务器与客户端之间保持持久的通信信道,实现快速、高效的数据传输。对于Java开发者来说,实现服务器与客户端之间的实时连接可以通过JavaHTTP心跳技术来实现。本文将介绍如何利用JavaHTTP心跳来实现服务器与客户端之间的实时连接。
219 0
|
9月前
|
数据安全/隐私保护
阿里云 RPA 在与服务器连接断开时会显示这个警告
阿里云 RPA 在与服务器连接断开时会显示这个警告
113 3
|
JavaScript
nodejs自动接收新邮件进行处理
通过imap 来接收邮箱新邮件,类似客户端系列,不过比较简单的,目前只有新邮件,后续也可以通过这个来做一个自己的邮件客户端。
nodejs自动接收新邮件进行处理
|
Linux
设置socket接收和发送超时的一种方式
设置socket接收和发送超时的一种方式
590 0
|
移动开发 网络协议 测试技术
服务器循环接收客户端消息|学习笔记
快速学习服务器循环接收客户端消息
104 0
服务器循环接收客户端消息|学习笔记
|
存储 安全 网络协议
WCF服务调用超时错误:套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的。本地套接字超时是“00:05:30”(已解决)
WCF服务调用超时错误:套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的。本地套接字超时是“00:05:30”(已解决)
506 0
开机显示被调用的对象已与其客户端断开连接,解决方案亲测有效
开机显示被调用的对象已与其客户端断开连接,解决方案亲测有效
1609 0
开机显示被调用的对象已与其客户端断开连接,解决方案亲测有效
|
缓存 算法 网络协议
【Java 网络编程】客户端 Socket 配置 ( 超时时间 | 端口复用 | Nagle 算法 | 心跳包机制 | 连接关闭机制 | 缓冲区大小 | 性能权重设置 | 紧急数据设置 )
【Java 网络编程】客户端 Socket 配置 ( 超时时间 | 端口复用 | Nagle 算法 | 心跳包机制 | 连接关闭机制 | 缓冲区大小 | 性能权重设置 | 紧急数据设置 )
902 0