天天看點

接收一次性廣播,開啟服務永久監聽

如果現在系統隻發送一個一次性廣播(比如開機啟動),

接收器隻識别一次,因為系統不繼續發送該廣播了;

現在是要在這種情況下開啟服務(開機啟動服務),

而且要連續的監聽變化(如:網絡改變時,該服務啟動),該怎麼處理?

第一步:在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", "沒有可用網絡");

              }

          }

      }

  };

    public IBinder onBind(Intent arg0)

        // TODO Auto-generated method stub

        return null;

    public void onDestroy()

        super.onDestroy();

        Log.v("Jeny", "[UpdateService]...onDestroy");

    public int onStartCommand(Intent intent, int flags, int startId)

        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);

    public void onCreate()

        super.onCreate();

        IntentFilter mFilter = new IntentFilter();

        mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);

        registerReceiver(mReceiver, mFilter);// 開機啟動時首次開啟服務後注冊接收器

     }

到此結束!

繼續閱讀