Android中的广播

向系统内发送一条广播:

<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方法就和上边一样了。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值