系统广播小案例

来源:互联网 发布:知耻而后勇是什么意思 编辑:程序博客网 时间:2024/05/21 19:22

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

实例:

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

只能是动态注册在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 );        }    }}
0 0
原创粉丝点击