Android—系统广播案列(来电、短信)

来源:互联网 发布:2016网络古装剧 编辑:程序博客网 时间:2024/06/04 17:44

案列一:来电  

(现在大部分手机在最开始的时候都自带安装了一个手机管家,权限比我们自己的写的第三方软件高,所以有可能读取不到)

            核心代码

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、再设置权限具体的系统广播权限

原创粉丝点击