Android广播机制

1.Android广播机制概述

Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器)。广播作为Android组件间的通信方式,可以使用的场景如下:
1.同一app内部的同一组件内的消息通信(单个或多个线程之间);
2.同一app内部的不同组件之间的消息通信(单个进程);
3.同一app具有多个进程的不同组件之间的消息通信;
4.不同app之间的组件之间消息通信;
5.Android系统在特定情况下与App之间的消息通信。

2.广播接收者

广播接收者简单地说就是接收广播意图的Java类,此Java类继承BroadcastReceiver类,重写:
public void onReceive(Context context,Intent intent),其中intent可以获得传递的数据;

class MyReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            unregisterReceiver(this);
        }
    }

启动广播:

Intent intent = new Intent(us.mifeng);
sendBroadcast(intent);
finish();

静态注册:
直接在AndroidManifest.xml文件中进行注册。规则如下:

<receiver android:name=".MyReceiver">  
        <intent-filter>  
             <action android:name="us.mifeng"/>  
        </intent-filter>  
</receiver> 

动态注册:
动态注册时,无须在AndroidManifest中注册组件。直接在代码中通过调用Context的registerReceiver函数,可以在程序中动态注册BroadcastReceiver。registerReceiver的定义形式如下:

//注册广播
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(us.mifeng);
        registerReceiver(new MyReceiver(),intentFilter);

无序广播:

(1)广播发送者:

public class MainActivity extends Activity {  
    private Button button;  
    private OnClickListener listener = new OnClickListener(){  
        @Override  
        public void onClick(View v) {  
            Intent intent = new Intent();  
            intent.setAction("com.xiazdong");  
            intent.putExtra("name", "xiazdong");  
            MainActivity.this.sendBroadcast(intent);  
            Toast.makeText(getApplicationContext(), "发送广播成功", Toast.LENGTH_SHORT).show();  
        }  
    };  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        button = (Button)this.findViewById(R.id.button);  
        button.setOnClickListener(listener);  
    }  
}  

(2)广播接收者

public class Receiver extends BroadcastReceiver {  

    @Override  
    public void onReceive(Context context, Intent intent) {  
        String name = intent.getExtras().getString("name");  
        Log.i("Recevier1", "接收到:"+name);  
    }  

}  

AndroidManifest.xml

<receiver android:name=".Receiver">  
        <intent-filter>  
             <action android:name="com.xiazdong"/>  
        </intent-filter>  
</receiver>  

有序广播

(1)广播发送者

public class MainActivity extends Activity {  
    private Button button;  
    private OnClickListener listener = new OnClickListener(){  
        @Override  
        public void onClick(View v) {  
            Intent intent = new Intent();  
            intent.setAction("com.xiazdong");  
            intent.putExtra("name", "xiazdong");  
            MainActivity.this.sendOrderedBroadcast(intent, null);   //有序广播发送  
            Toast.makeText(getApplicationContext(), "发送广播成功", Toast.LENGTH_SHORT).show();  
        }  
    };  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        button = (Button)this.findViewById(R.id.button);  
        button.setOnClickListener(listener);  
    }  
}  

(2)广播接收者

public class Receiver extends BroadcastReceiver {  

    @Override  
    public void onReceive(Context context, Intent intent) {  
        String name = intent.getExtras().getString("name");  
        Log.i("Recevier1", "接收到:"+name);  
        abortBroadcast();   //Receiver1接收到广播后中断广播  
    }  

}  

AndroidManifest.xml

[html] view plain copy

<receiver android:name=".Receiver">  
      <intent-filter android:priority="1000"> <!-- 设置最高优先级 -->  
         <action android:name="com.xiazdong"/>  
      </intent-filter>  
 </receiver>  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值