android四大组件之BroadcastReceiver

程序源码http://download.csdn.net/detail/taoolee/9090315

BroadcastReceiver介绍

BroadcastReceiver用于接收程序(包括用户开发的程序和系统内部的程序)所发出的Broadcast Intent

用法

程序启动BroadcastReceiver只需要两步
1 创建需要启动的BroadcastReceiver的Intent
2 调用Context的sendBroadcast()或sendOrderedBroadcast()方法来启动指定的BroadcastReceiver

 private void sendBroadcast() {
        Intent intent = new Intent();
        //设置频道com.receiver.test
        intent.setAction("com.receiver.test");
        intent.putExtra("msg", "简单的消息");
        sendBroadcast(intent);
    }
程序接收Broadcast使用BroadcastReceiver

BroadcastReceiver本质上是一个系统级的监听器,拥有自己的进程,只要有与之匹配的Intent就要被广播出来。只要重写BroadcastReceiver的onReceive()方法就可以,并同时指定能匹配的Intent 有两种方法指定匹配的intent;

注意:每次系统Broadcast事件发生后,系统执行完onReceive()方法后,BroadcastReceiver实例就要被销毁,所以要 @Override protected void onDestroy() 方法 (1)AndroidManifest.xml文件中

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

        </receiver>

(2)java代码中

 private MyReceiver myReceiver;

 //代码中设置频道,最后要解除绑定
        myReceiver=new MyReceiver();
        IntentFilter filter=new IntentFilter("com.receiver.test");
        registerReceiver(myReceiver,filter);
 @Override
    protected void onDestroy() {
        super.onDestroy();
        //解除绑定
        unregisterReceiver(myReceiver);
    }

当应用程序发出一个Broadcast Intent之后,所有匹配改Intent的BroadcastReceiver都有可能被启动,下面程序用于接收广播,收到后使用Toast提示信息

public class MyReceiver extends BroadcastReceiver {

    //用于接收广播收到后使用Toast提示
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"收到消息",Toast.LENGTH_LONG).show();
    }
}

效果演示如下
这里写图片描述

下面利用BroadcastReceiver实现闹钟功能

private AlarmManager mAlarmManager;


 mAlarmManager= (AlarmManager) getSystemService(Context.ALARM_SERVICE);


 private void startAlarm() {
        Intent intent2 = new Intent();
        //设置频道
        intent2.setAction("com.receiver.test");
        //0x23为随便设置的标志
         PendingIntent pendingIntent=PendingIntent.getBroadcast(getApplicationContext(),0x23,intent2,PendingIntent.FLAG_UPDATE_CURRENT);
        mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+5000,3000,pendingIntent);
    }
     private void cancelAlarm() {
        Intent intent2 = new Intent();
        //设置频道
        intent2.setAction("com.receiver.test");

         PendingIntent pendingIntent=PendingIntent.getBroadcast(getApplicationContext(),0x23,intent2,PendingIntent.FLAG_UPDATE_CURRENT);
        //五秒后启动闹钟, 三秒后再次启动闹钟
         mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+5000,3000,pendingIntent);
         mAlarmManager.cancel(pendingIntent);
    }

效果如下
这里写图片描述

使用系统广播

下面两个一个监听网络状态另一个当程序被卸载时广播

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.broadcast_package_removed"/>

<receiver android:name=".MyReceiver">

    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE"></action>
        <action android:name="android.intent.action.PACKAGE_REMOVED"></action>


    </intent-filter>
</receiver>
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值