Android中BroadcastReceiver的基本用法(备忘)

     这一节,来复习一下Android中的广播BoadcastReceiver,首先得知道它是什么及作用,用于接收系统或应用发送的广播,实现组件之间的跨进程通讯(允许一对多).

然后它的注册方式:(1)静态注册,在清单文件中(2)动态注册,在java代码中实现。

应用如下:

动态广播常见用法(1):一个Activity类发广播,另一个单独BroadcastReceiver广播类收广播。静态广播就不细说,一般容易实现。

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);       
       //动态注册
        MyReceiver receiver = new MyReceiver();
        IntentFilter intentFilter = new IntentFilter(MyReceiver.action);
        registerReceiver(receiver,intentFilter);
findViewById(R.id.btnsend).setOnClickListener(new View.OnClickListener() {  
        @Override            
        public void onClick(View v) {     
        Log.d("TAG","onClick"); 
        //静态注册                
        //Intent intent = new Intent(MyStaticReceiver.ACTION);//    
        sendBroadcast(intent); 
        //动态注册 
        Intent i= new Intent(MyReceiver.action);  
        //注意广播可以传小数据量,大数据量不宜用广播   
        i.putExtra("AA","play"); 
        sendBroadcast(i);   
         }   
     });  
 }
// 取消广播
@Override
protected void onDestroy() {
    super.onDestroy();
    Log.d("TAG","onDestroy-SecondActivity");
    unregisterReceiver(receiver);
}
}
MyReceiver类:
public class MyReceiver extends BroadcastReceiver {
   
    public static final String action = "startimes.com.receiverdemo2.intent.action.receiver";
    public MyReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("TAG","onReceive");
        String aa = intent.getStringExtra("AA");
        Log.d("TAG"," aa= "+aa);
    }
}
静态广播在AndroidManifest注册:
    <!--<receiver-->
    <!--android:name=".MyReceiver"-->
    <!--android:enabled="true"-->
    <!--android:exported="true" />-->
常见用法(2)在两个Activity之间发送广播,这个用的比较多,也容易出问题,比如在X1Activity发广播,同时携带一点少量数据,在X2Activity收广播,常常会发现收不到数据。可能的原因如X2Activity还没有运行起来,应用代码如下:

public class MainActivity extends Activity {
    private Button btnSend;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnSend = (Button) findViewById(R.id.btn_send);
        btnSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent);
            }
        });
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.d("TAG","onResume");
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.d("TAG","onStart");
    }
    @Override
    protected void onPause() {
        super.onPause();
        Log.d("TAG","onPause");
        Intent intent = new Intent(SecondActivity.action);
        intent.putExtra("AA","understand the broadcastreceiver");
        sendBroadcast(intent);
    }
    @Override
    protected void onStop() {
        super.onStop();
        Log.d("TAG","onStop");
        Intent intent = new Intent(SecondActivity.action);
        intent.putExtra("AA","understand the broadcastreceiver");
        sendBroadcast(intent);
    }
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d("TAG","onRestart");
        Intent intent = new Intent(SecondActivity.action);
        intent.putExtra("AA","understand the broadcastreceiver");
        sendBroadcast(intent);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("TAG","onDestroy");
    }
}
SecondActivity:

public class SecondActivity extends Activity {
    public static final String action = "startimes.com.receiverdemo2.intent.action.dynamicreceiver";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
       //动态注册
        IntentFilter intentFilter = new IntentFilter(SecondActivity.action);
        registerReceiver(this.receiver,intentFilter);
    }
    BroadcastReceiver receiver=new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("TAG","onReceive");
        String aa = intent.getStringExtra("AA");
        Log.d("TAG"," aa= "+aa);
    }
};
    @Override
    protected void onStart() {
        super.onStart();
        Log.d("TAG","onStart-SecondActivity");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.d("TAG","onResume-SecondActivity");
    }
    @Override
    protected void onPause() {
        super.onPause();
        Log.d("TAG","onPause-SecondActivity");
    }
    @Override
    protected void onStop() {
        super.onStop();
        Log.d("TAG","onStop-SecondActivity");
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("TAG","onDestroy-SecondActivity");
        unregisterReceiver(receiver);
    }
}

布局文件就一个按钮控件,代码就不贴了。

运行结果如下:


这一节就先说这些吧。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值