小例實現步驟:
①.在MainActivity裡面發送兩種類型的廣播:sendBroadcast和sendStickyBroacat。
②在ReceverActivity裡面通過BroadcastReceiver來接收這兩個訊息,這裡是通過代碼來註冊Recevier而不是在Manifest裡面註冊的。
③結論:通過sendBroadcast中發出的intent在ReceverActivity不處於onResume狀態是無法接受到的,即使後面再次使其處於該狀態也無法接受到。而sendStickyBroadcast發出的Intent當ReceverActivity重新處於onResume狀態之後就能重新接受到其Intent。這就是the Intent will be held to be re-broadcast
to future receivers這句話的表現。就是說sendStickyBroadcast發出的最後一個Intent會被保留,下次當Recevier處於活躍的時候,又會接受到它。
④在wifi中就是發送的粘性廣播。
下面是兩個類的代碼部分。
MainActivity:
public class MainActivity extends Activity { Button btnSendi; Button btnSends; Button btnStart; Context mContext; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnSendi=(Button) findViewById(R.id.sendi); btnSends=(Button) findViewById(R.id.sends); btnStart=(Button) findViewById(R.id.start); mContext=getApplicationContext(); btnSendi.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(); intent.setAction("com.android.my.action"); intent.setFlags(1); mContext.sendBroadcast(intent); } }); btnStart.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(MainActivity.this,ReceiverActivity.class); startActivity(intent); } }); btnSends.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(); intent.setAction("com.android.my.action.sticky"); intent.setFlags(2); mContext.sendStickyBroadcast(intent); } }); } }
ReceiverActivity :
public class ReceiverActivity extends Activity { private IntentFilter mIntentFilter; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mIntentFilter = new IntentFilter(); mIntentFilter.addAction("com.android.my.action"); mIntentFilter.addAction("com.android.my.action.sticky"); } private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); System.out.println("action"+action); } }; @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); registerReceiver(mReceiver, mIntentFilter); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); unregisterReceiver(mReceiver); } }