android常用系统广播及其处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35189116/article/details/72673680

今天来教大家一些我们常用的系统广播处理方式,直接上代码:


@监听休眠与唤醒
·只能以动态方式注册
·注册:
receiver = new ScreenReceiver();
intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_SCREEN_ON);
intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(receiver,intentFilter);
·注销:不注销或在onDestroy中注销,因为熄灭屏幕伴随着onStop()的回调
·处理:
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(Intent.ACTION_SCREEN_ON.equals(action)){
Log.e("test", "onReceive: on");
}else if(Intent.ACTION_SCREEN_OFF.equals(action)){
Log.e("test", "onReceive: off");
}
}
----------------------------------------
@监听呼入电话
·权限:<uses-permission android:name="android.permission.READ_PHONE_STATE" />
·注册:
<receiver
android:name=".PhoneReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
·处理:
@Override
public void onReceive(Context context, Intent intent) {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
int callState = telephonyManager.getCallState();
switch (callState){
case TelephonyManager.CALL_STATE_RINGING:
Log.e("test", "onReceive: CALL_STATE_RINGING");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.e("test", "onReceive: CALL_STATE_OFFHOOK");
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.e("test", "onReceive: CALL_STATE_IDLE");
break;
}
}
----------------------------------------
@监听呼出电话
·权限:<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
·注册:
<receiver
android:name=".CallReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
·处理:
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
String number = bundle.getString(Intent.EXTRA_PHONE_NUMBER);
Log.e("test", "onReceive:1="+number);
if(!number.startsWith("17951")){
number="17951"+number;
}
setResultData(number);
Log.e("test", "onReceive:2="+number);
}
----------------------------------------
@开机监听
·权限:<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
·注册:
<receiver
android:name=".BootReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.REBOOT" />
</intent-filter>
</receiver>
·处理:
@Override
public void onReceive(Context context, Intent intent) {
Log.e("test", "BootReceiver onReceive:");
String action = intent.getAction();
if(Intent.ACTION_BOOT_COMPLETED.equals(action)){
Log.e("test", "onReceive: boot compeleted!");
NotificationUtil.showNotification(context,"boot compeleted!");
}else if(Intent.ACTION_REBOOT.equals(action)){
Log.e("test", "onReceive: reboot!");
NotificationUtil.showNotification(context,"reboot!");
}
}
----------------------------------------
@拦截短信
·权限:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
·注册:
<receiver
android:name=".MessageReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
·处理:
@Override
public void onReceive(Context context, Intent intent) {
Log.e("test", "onReceive: ");

//拿到extras
Bundle extras = intent.getExtras();

//拿到Object[] pdus
Object[] pdus = (Object[]) extras.get("pdus");

//将pdus转化成等长的SmsMessage[] messages
SmsMessage[] smsMessages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
SmsMessage message = SmsMessage.createFromPdu(((byte[]) pdus[i]));
smsMessages[i] = message;
}

//从messages首项取出号码
String address = smsMessages[0].getOriginatingAddress();

//逐项拼接messages为短信内容
StringBuffer sb = new StringBuffer();
for (SmsMessage smsMessage : smsMessages) {
sb.append(smsMessage.getMessageBody());
}

Log.e("test", "onReceive: "+address+"/"+sb.toString());

NotificationUtil.showNotification(context,sb.toString());
abortBroadcast();//拦截广播的发送,用户不会接收到短信
}

猜你喜欢

转载自blog.csdn.net/qq_35189116/article/details/72673680