Android组件——Broadcast Receiver

Android中的每个应用程序都可以对自己感兴趣的广播进行注册,这样改程序就只会接收到自己所关心的广播内容,广播内容可能来自系统和其他应用程序。

广播接收器可以自由地对自己感兴趣的广播进行注册。注册广播的方式一般有两种,在代码中注册和在AndroidManifest.xml中注册,前者也叫动态注册,后者也叫静态注册。

创建一个广播接收器

创建一个广播接收器需要新建一个类,继承BroadcastReceiver,并重写父类的onReceive()方法

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

广播接收器的注册

在代码中注册
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private Button mButtonSend;
    private Button mButtonAlarm;
    private Button mButtonCancelAlarm;
    private IntentFilter mIntentFilter;
    private MyBroadCastReceiver mMyReceiver;
    private AlarmManager mAlarmManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mButtonSend= (Button) findViewById(R.id.button_send);
        mButtonSend.setOnClickListener(this);
        mButtonAlarm= (Button) findViewById(R.id.button_alarm);
        mButtonAlarm.setOnClickListener(this);
        mButtonCancelAlarm= (Button) findViewById(R.id.button_cancel_alarm);
        mButtonCancelAlarm.setOnClickListener(this);
        mIntentFilter=new IntentFilter();
        mMyReceiver=new MyBroadCastReceiver();
        mIntentFilter.addAction("com.broadcastreceiver");
        registerReceiver(mMyReceiver,mIntentFilter);//在代码中注册广播接收器,也叫动态注册
        mAlarmManager= (AlarmManager) getSystemService(ALARM_SERVICE);
         Intent intent=new Intent();
        intent.setAction("com.broadcastreceiver");
        sendBroadcast(intent);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(mMyReceiver);//当活动关闭时,要取消注册
    }

动态注册的广播接收器一定都要取消注册才行

在Manifest中注册
 <receiver android:name=".MyBroadCastReceiver">
            <intent-filter>
                <action android:name="com.broadcastreceiver"/>
            </intent-filter>
        </receiver>

利用广播写一个小闹钟的例子

首先还是要写一个继承自BrodcastReceiver类的一个广播接收类

package com.example.administrator.mybroadcast;


import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private Button mButtonAlarm;
    private Button mButtonCancelAlarm;
    private IntentFilter mIntentFilter;
    private MyBroadCastReceiver mMyReceiver;
    private AlarmManager mAlarmManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mButtonAlarm= (Button) findViewById(R.id.button_alarm);
        mButtonAlarm.setOnClickListener(this);
        mButtonCancelAlarm= (Button) findViewById(R.id.button_cancel_alarm);
        mButtonCancelAlarm.setOnClickListener(this);
        mIntentFilter=new IntentFilter();
        mMyReceiver=new MyBroadCastReceiver();
        mIntentFilter.addAction("com.broadcastreceiver");
        registerReceiver(mMyReceiver,mIntentFilter);//在代码中注册广播接收器,也叫动态注册
        mAlarmManager= (AlarmManager) getSystemService(ALARM_SERVICE);
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()){

            case R.id.button_alarm:
                alarm();
                break;
            case R.id.button_cancel_alarm:
                cancelAlarm();
                break;
            default:
                break;
        }
    }

    private void cancelAlarm() {
        Intent intent=new Intent();
        intent.setAction("com.broadcastreceiver");
        PendingIntent pendingIntent=PendingIntent.getBroadcast(getApplicationContext(),121,intent,PendingIntent.FLAG_UPDATE_CURRENT);
        mAlarmManager.cancel(pendingIntent);
    }

    private void alarm() {
        Intent intent=new Intent();
        intent.setAction("com.broadcastreceiver");
        PendingIntent pendingIntent=PendingIntent.getBroadcast(getApplicationContext(),121,intent,PendingIntent.FLAG_UPDATE_CURRENT);
        mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+3000,4000,pendingIntent);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(mMyReceiver);//当活动关闭时,要取消注册
    }
}

接收来自系统的广播

在Manifest中添加action,需要监听什么就些什么,需要注意到的是有些是需要权限的。

//权限
<uses-permission android:name="android.permission.broadcast_package_removed"/>
    <uses-permission android:name="ANDROID.PERMISSION.CHANGE_NETWORK_STATE"/>
    //action
 <receiver android:name=".MyBroadCastReceiver">
            <intent-filter>

                <action android:name="android.intent.action.PACKAGE_REMOVED"></action>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE"></action>
            </intent-filter>
        </receiver>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值