案列一:来电
(现在大部分手机在最开始的时候都自带安装了一个手机管家,权限比我们自己的写的第三方软件高,所以有可能读取不到)
核心代码
package com.example.android21_phone;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.util.Log;
/**
* Created by Administrator on 2017/7/11 0011.
*/
public class MyPhoneState extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if("android.intent.action.PHONE_STATE".equals(intent.getAction())){
//获取电话管理者
TelephonyManager tm= (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
int state=tm.getCallState();
//获取电话号码
String number=intent.getStringExtra("incoming_number");
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
Log.i("test","有电话进来了"+number);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.i("test","通话中"+number);
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.i("test","通话结束了"+number);
break;
}
}
}
}
配置receiver
<receiver android:name=".MyPhoneState">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"></action>
</intent-filter>
</receiver>
注意:在AndroidManifest.xml中要设置读取电话状态的权限
<!--读取电话状态的权限-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
案例二:短信
(读取短信必须要在手机设置中的应用管理中,找到你安装的应用给他设置读取短信内容的权限)
核心代码配置receiverpackage com.zking.administrator.g160628_android22_sms; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import android.util.Log; /** * Created by Administrator on 2017/7/13 0013. */ public class MySMS extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if("android.provider.Telephony.SMS_RECEIVED".equals(intent.getAction())){ Log.i("test","收到短信了"); Bundle bundle=intent.getExtras(); Object object[]= (Object[]) bundle.get("pdus"); SmsMessage smsMessage[]=new SmsMessage[object.length]; for (int i = 0; i < object.length; i++) { smsMessage[i]=SmsMessage.createFromPdu((byte[])object[i]); } for (SmsMessage message : smsMessage) { String address=message.getOriginatingAddress(); String body=message.getDisplayMessageBody(); Log.i("test",address+":"+body); } } } }
<receiver android:name=".MySMS"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> </intent-filter> </receiver>
注意:在AndroidManifest.xml中要设置读取短信的权限
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
总结:接收系统广播的步骤
1、写一个类,继承BroadcastReceiver重写里面onReceive方法
2、通过if判断属于哪个系统广播(比如说上面案例一、案列二的短信和来电)
3、再通过判断状态去执行你想要执行的操作
4、再XML中配置receiver
5、再设置权限具体的系统广播权限