sendStickyBroadcast和sendStickyOrderedBroadcast
sendStickyBroadcast和sendStickyOrderedBroadcast
sendStickyBroadcast和sendStickyOrderedBroadcast發出的廣播會一直滯留(等待),以便有人註冊這則廣播消息後能儘快的收到這條廣播。其他功能與sendBroadcast相同。但是使用sendStickyBroadcast
發送廣播需要獲得BROADCAST_STICKY
permission,如果沒有這個permission則會拋出異常。
例子:
- package com.android.test;
- import android.app.Activity;
- import android.content.Context;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public class StickyBroadcastTest extends Activity {
- private Button mSendBroadcast;
- private Button mSendStickyBroadcast;
- private Button mNextActivity;
- private Context mContext;
- private int mStickyBrcCount;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mContext = getApplicationContext();
- mSendBroadcast = (Button)findViewById(R.id.broadcast);
- mSendStickyBroadcast = (Button)findViewById(R.id.stickybroadcast);
- mNextActivity = (Button)findViewById(R.id.next_activity);
- mSendBroadcast.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent("com.android.action.broadcast");
- mContext.sendBroadcast(intent);
- }
- });
- mSendStickyBroadcast.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- mStickyBrcCount++;
- Intent intent = new Intent("com.android.action.sticky.broadcast");
- intent.putExtra("sent_count", mStickyBrcCount);
- mContext.sendStickyBroadcast(intent);
- }
- });
- mNextActivity.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent(StickyBroadcastTest.this, MyReceiverActivity.class);
- startActivity(intent);
- }
- });
- }
- @Override
- protected void onResume() {
- // TODO Auto-generated method stub
- super.onResume();
- mStickyBrcCount = 0;
- }
- }
- //MyReceiverActivity
- package com.android.test;
- import android.app.Activity;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.os.Bundle;
- import android.util.Log;
- public class MyReceiverActivity extends Activity {
- private IntentFilter mIntentFilter;
- private final static String TAG = "MyReceiverActivity";
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.broadcast_receiver);
- mIntentFilter = new IntentFilter();
- mIntentFilter.addAction("com.android.action.broadcast");
- mIntentFilter.addAction("com.android.action.sticky.broadcast");
- }
- private BroadcastReceiver mReceiver = new BroadcastReceiver () {
- @Override
- public void onReceive(Context context, Intent intent) {
- final String action = intent.getAction();
- int count = intent.getIntExtra("sent_count", -1);
- Log.d(TAG, "action = " + action + "and count = " + count);
- //context.removeStickyBroadcast(intent);
- }
- };
- @Override
- protected void onPause() {
- // TODO Auto-generated method stub
- super.onPause();
- unregisterReceiver(mReceiver);