Android—系統廣播案列(來電、短信)

案列一:來電  

(現在大部分手機在最開始的時候都自帶安裝了一個手機管家,權限比我們自己的寫的第三方軟件高,所以有可能讀取不到)

            核心代碼

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、再設置權限具體的系統廣播權限

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章