Android四大组件---BroadcastReseiver(广播接收器)

基本用法

BroadcastReseiver就是用来接收特定标志的(可以理解为收音机的频率,这里用的“com.android.receiver”)广播
首先在Manifest的activity下静态声明或者做代码中动态注册广播接收器,广播接收器中不允许开启线程,也就是说耗时操作会报错。
Manifest中声明:

<receiver android:name=".Reseiver.MyReseiver">
    <intent-filter>
        <action android:name="com.android.reseiver"></action>
    </intent-filter>
</receiver>

代码中注册接收器:

myReseiver=new MyReseiver();
IntentFilter filter=new IntentFilter();
filter.addAction("com.android.receiver");
registerReceiver(myReseiver,filter);//绑定接收器,必须再复写一个onDestory解绑,不然关闭app会报错
@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(myReseiver);//解绑,如果不解绑退出时会报错
}

先创建一个接收器类MyReseiver继承自BroadcastReceiver,广播只写了个Toast

public class MyReseiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"接收了广播",Toast.LENGTH_SHORT).show();
    }
}

在Mainactivity中,声明了接收器后增加一个button的点击事件:

mBtn_reseiver.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent=new Intent();
        intent.setAction("com.android.receiver");//添加声明中的标签(波段)
        sendBroadcast(intent);//发送广播,参数是Intent类
    }
});

这里写图片描述

简易闹钟

现在做一个闹钟,需要使用AlarmManager类,及其下方法setRepeating和cancel分别开启闹钟关闭闹钟。
在布局中添加两个按钮,闹钟、取消
声明然后绑定接收器,增加两个button的点击事件

public class MainActivity extends Activity implements View.OnClickListener {
    private MyReseiver myReseiver;
    private Button mBtn_alam;
    private Button mBtn_cancel;
    private AlarmManager alarmManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myReseiver = new MyReseiver();
        alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        IntentFilter filter = new IntentFilter();
        filter.addAction("com.android.receiver");
        registerReceiver(myReseiver, filter);//绑定接收器
        mBtn_alam = (Button) findViewById(R.id.button_alam);
        mBtn_cancel = (Button) findViewById(R.id.button_alamcancel);
        mBtn_alam.setOnClickListener(this);
        mBtn_cancel.setOnClickListener(this);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myReseiver);//解绑,如果不解绑会报错
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.button_alam:
                Intent intent=new Intent();
                intent.setAction("com.android.receiver");//添加声明中的标签(波段)
                PendingIntent pendingIntent=PendingIntent.getBroadcast(getApplicationContext(),0123,intent,PendingIntent.FLAG_UPDATE_CURRENT);
                //得PendingIntent,context、code随意、intent、flag
                alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+1000,3000,pendingIntent);
                //类型、开始时间(现在延迟1s)、间隔3s、Pendingntent
                break;
            case R.id.button_alamcancel:
                Intent intent1=new Intent();
                intent1.setAction("com.android.receiver");//添加声明中的标签(波段)
                PendingIntent pendingIntent1=PendingIntent.getBroadcast(getApplicationContext(),0123,intent1,PendingIntent.FLAG_UPDATE_CURRENT);
                alarmManager.cancel(pendingIntent1);//取消
                break;
        }
    }
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值