BroadcastReceiver简单学习

本文详细介绍了Android中的广播机制,包括动态注册与静态注册广播接收者的区别及使用方式,并提供了具体的代码示例。文章强调了避免在广播中进行耗时操作的重要性。

1.动态注册广播接受者

就是在java中指定IntentFilter,然后添加不同的Action即可,想监听什么广播就写什么Action。要注意的是
动态注册广播,一定要调用unregisterReceiver()。

2.静态注册广播接受者

动态注册需要程序启动后才能接收广播,静态广播就弥补了这个短板,在AndroidManifest中定制就可以让程序在未启动的情况下接收到广播了。

示例代码:

MyReceiver .java

public class MyReceiver extends BroadcastReceiver{

    //自己定义的Action
     private final String ACTION_BOOT = "com.example.broadcasttest.MY_BROADCAST";

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub

        if(ACTION_BOOT.equals(intent.getAction())){

            Toast.makeText(context,"收到广播啦!",Toast.LENGTH_SHORT).show();
        }


    }

}

动态注册:

MainActivity .java

public class MainActivity extends Activity {  

    private MyReceiver myReceiver;
    private Button btn_start;

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        btn_start=(Button)findViewById(R.id.btn_start);
        btn_start.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                sendBroadcast(new Intent("com.example.broadcasttest.MY_BROADCAST"));
            }
        });

        myReceiver=new MyReceiver();
        IntentFilter itFilter=new IntentFilter();
        //自己定义的广播,也可以监听系统广播,如开机完毕,网络变化等
        itFilter.addAction("com.example.broadcasttest.MY_BROADCAST");
        registerReceiver(myReceiver, itFilter);

    }  

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        unregisterReceiver(myReceiver);
    }
} 

静态注册:

manifest文件

  <receiver android:name=".MyReceiver" >
            <intent-filter>
                <action android:name="com.example.broadcasttest.MY_BROADCAST" />
            </intent-filter>
        </receiver>

MainActivity.java

public class MainActivity extends Activity {  

    private MyReceiver myReceiver;
    private Button btn_start;

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        btn_start=(Button)findViewById(R.id.btn_start);
        btn_start.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                sendBroadcast(new Intent("com.example.broadcasttest.MY_BROADCAST"));
            }
        });

    }  

} 

注意事项:

不要在广播里添加过多逻辑或者进行任何耗时操作,因为在广播中是不允许开辟线程的, 当onReceiver( )方法运行较长时间(超过10秒)还没有结束的话,那么程序会报错(ANR), 广播更多的时候扮演的是一个打开其他组件的角色,比如启动Service,Notification提示, Activity等!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值