案列一:來電
(現在大部分手機在最開始的時候都自帶安裝了一個手機管家,權限比我們自己的寫的第三方軟件高,所以有可能讀取不到)
核心代碼
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>
案例二:短信
(讀取短信必須要在手機設置中的應用管理中,找到你安裝的應用給他設置讀取短信內容的權限)
核心代碼
package 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 <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、再設置權限具體的系統廣播權限