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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值