向系统内发送一条广播:
<span style="font-size:14px;">public void click(View view){
//发送一个自定义的广播.
Intent intent = new Intent();
intent.setAction("com.itheima.mybroadcast.xxx");//定义动作
sendBroadcast(intent);//业务方法发送一条无序广播,往手机操作系统内发送一条消息,不同步,内容为com.itheima.mybroadcast.xxx
sendOrderedBroadcast(intent, null);//发送一条有序广播</span>
接收广播
广播接收者接收广播的2种方式(接收上边自定义发送出的广播):
一 AndroidManifest.xml注册的方式:
1 AndroidManifest.xml中注册广播接收器
接收者1
<span style="font-size:14px;"><receiver android:name="com.itheima.myreceiver.MyReceiver1" >
<intent-filter android:priority="1000">//优先级,最高为1000,优先级越高,越先接收到广播
<span style="white-space:pre"> </span><action android:name="com.itheima.mybroadcast.xxx" />//关心的动作,比如短信到来,电话打入
</intent-filter>
</receiver></span>
接收者2<span style="font-size:14px;"> <receiver android:name="com.itheima.myreceiver.MyReceiver2" >
<intent-filter android:priority="500">
<action android:name="com.itheima.mybroadcast.xxx"/>
</intent-filter>
</receiver></span>
实现广播接收器
<pre name="code" class="java"><span style="font-size:14px;">public class MyReceiver1 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String news = intent.getStringExtra("news");
System.out.println("我是receiver1"+news);
abortBroadcast();
}
}</span>
高级别接受者可以通过getResuleData();方法获取广播内容,setResultData();更改广播内容。
可以通过abordbroadcast方法终止广播
对于这种在AndroidManifest.xml注册的方式,android不能自动销毁广播接收器,也就是说当应用程序关闭后,广播接收器还是会接收广播,这样就会很麻烦。比如,当前应用程序需要接收广播并会弹出一个消息,当用户关闭应用程序后,广播接收器还会继续接收广播并会弹出消息,这样就影响了用户的使用,所以,第二种广播接收器的实现可以让程序员手动定义销毁接收器的代码。
二 用代码注册接收者
public class TestBC2Activity extends Activity implements OnClickListener
{
private Button registerButton = null;
private Button unregisterButton = null;
private SMSReceiver smsReceiver = null;
private static final String SMS_ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
registerButton = (Button) findViewById(R.id.register);
registerButton.setOnClickListener(this);
unregisterButton = (Button) findViewById(R.id.unregister);
unregisterButton.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
int viewId = v.getId();
switch (viewId)
{
case R.id.register:
{
smsReceiver = new SMSReceiver();//生成一个BroiadcastReceiver对象
IntentFilter filter = new IntentFilter();//生成一个IntentFilter对象
filter.addAction(SMS_ACTION);//为IntentFilter添加一个Action
TestBC2Activity.this.registerReceiver(smsReceiver, filter);//将BroadcastReceiver对象注册到系统当中
break;
}
case R.id.unregister:
{
TestBC2Activity.this.unregisterReceiver(smsReceiver);//解除BroadcastReceiver对象的注册
break;
}
}
}
}
上边分别定义了两个按钮,用来注册和解除注册。
下面接收器的receive方法就和上边一样了。