1.发送标准广播
我们通过一个按钮来发送广播,广播接收器接收到广播后执行具体操作。
首先建立布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Send Broadcast"
/>
</LinearLayout>
然后创建一个自己的广播
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(
"com.example.broadcasttest.MY_BROADCAST");
sendBroadcast(intent);
}
});
}
再新建一个广播接收器来接收我们发送的广播
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "received", Toast.LENGTH_SHORT).show();
}
}
最后注册广播接收器
<receiver android:name=".MyBroadcastReceiver" >
<intent-filter>
<action android:name="com.example.mybroadcast. MY_BROADCAST" />
</intent-filter>
</receiver>
2.发送有序广播
有序广播和标准广播基本上一样,只需要修改几个地方。
- 将发送广播的方式改为sendOrderedBroadcast(intent, null);
- 设置广播接收器的权限intent-filter android:priority=”100”
- 广播优先级高的权限可以终止广播abortBroadcast();
3.本地广播机制
为了能够简单地解决广播的安全性问题, Android 引入了一套本地广播机制,使用这个机制发出的广播只能够在应用程序的内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播。
另外还有一点需要说明,本地广播是无法通过静态注册的方式来接收的。
public class MainActivity extends ActionBarActivity {
private IntentFilter intentFilter;
private LocalReceiver localReceiver;
private LocalBroadcastManager localBroadcastManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
localBroadcastManager = LocalBroadcastManager.getInstance(this);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(
"com.example.mybroadcast.MY_BROADCAST");
localBroadcastManager.sendBroadcast(intent);
}
});
intentFilter = new IntentFilter();
intentFilter.addAction("com.example.mybroadcast.MY_BROADCAST");
localReceiver = new LocalReceiver();
localBroadcastManager.registerReceiver(localReceiver, intentFilter);
}
protected void onDestroy() {
super.onDestroy();
localBroadcastManager.unregisterReceiver(localReceiver);
}
class LocalReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "received local broadcast",
Toast.LENGTH_SHORT).show();
}
}