系统广播小案例

上一节说到广播的原理、流程等。那在应用中,该怎么去用。系统的广播可以检测到电量变化、网络变化、用户的拨打电话、用户接入电话、检测接收短信。。。
那么我们就开始以案例开始,深入广播的使用

实例:

==一==、检测手机电量

只能是动态注册在Activity中的OnCreate()中注册
    receiverPower = new MyReceiverPower();
    registerReceiver(receiverPower,new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
public class MyReceiverPower extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)){
            //1、得到当前系统电量
            int level=intent.getIntExtra("level",100);
            //2、得到系统总电量
            int total=intent.getIntExtra("scale",100);
            //3、计算电量比
            int currLevel=level*100/total;
            Toast.makeText(context, "当前电量"+currLevel, Toast.LENGTH_SHORT).show();
        }
    }
}

==二==、检测手机网络状态

涉及到网络权限问题,需要在AndroidManifest.xml中添加

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

动态注册

      @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        receiverPower = new MyReceiverPower();
        registerReceiver(receiverPower,new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));


    }

在广播接收者中

public class MyReceiverPower extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
            ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

            NetworkInfo info = manager.getActiveNetworkInfo();

            if (info != null) {
                if (info.isConnected()) {
                    Toast.makeText(context, "网络连接成功", Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(context, "网络连接异常!!!", Toast.LENGTH_LONG).show();
                }
            } else {
                Toast.makeText(context, "网络连接异常!!!", Toast.LENGTH_LONG).show();
            }
        }
}}

==三==、检测手机来电

一样涉及权限问题

    <!--添加检测用户拨打电话的权限-->
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
public class MyReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {

        Bundle bundle = intent.getExtras();
        //获取用户拨打的电话号码
        String number = bundle.getString(Intent.EXTRA_PHONE_NUMBER);

        Log.e("MyReceiver ", "当前拨打的电话号码为:   " + number);
    }
}

==四==、检测手机来电状态

添加权限:

 <!--添加获取拨入电话的权限-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
public class MyReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {

        //1, 获取电话管理器对象
        TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

        //2, 获得电话号码
        Bundle bundle = intent.getExtras();
        String number = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);

        //3, 获取电话的状态
        int state= manager.getCallState();

        switch (state)
        {
            case TelephonyManager.CALL_STATE_RINGING://响铃  1

                Log.e("MyReceiver", "响铃 ===  " + number);

                break;

            case TelephonyManager.CALL_STATE_OFFHOOK://接听  2

                Log.e("MyReceiver", "=====接听====");
                break;

            case TelephonyManager.CALL_STATE_IDLE://挂断  0

                Log.e("MyReceiver", "=====挂断====");

                break;
        }
    }
}

==五==、手机短信监听

 <!--添加检测短信的权限-->
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
public class MyReceiver extends BroadcastReceiver{
    private  String  TAG = "MyReceiver";
    @Override
    public void onReceive(Context context, Intent intent) {


        Object[] pdus = (Object[]) intent.getExtras().get("pdus");

        for (Object pdu:pdus)
        {
           SmsMessage message =  SmsMessage.createFromPdu((byte[]) pdu);

            //获取短信的发送者
            String send = message.getDisplayOriginatingAddress();

            //获取短信的内容
            String body = message.getMessageBody();

            //获取短信的接收时间
           long date =  message.getTimestampMillis();
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String time = format.format(date);

            Log.e(TAG, "短信来自于:  " + send);
            Log.e(TAG, "短信内容为: "+ body );
            Log.e(TAG, "接收的时间: " + time );

        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值