• Android四大组件之一:BroadCastReceiver(广播接收者)


    广播接受者是(BroadCastReceiver)是Android中的地大组件之一,之前学习了一些关于BroadCastReceiver方面的知识,今天回过头来发现已经快忘记的差不多了,毕竟现在是刚开始学习这门开发,并没有经常的用到这样技术,所以导致忘得非常的快,好了,废话少说,还是言归正传。

    一、广播机制的注册和取消

      说明:广播机制的注册分为两种,一种是想注册Activity一样,直接在AndroidManifest.xml文件中直接注册,另外一个中是动态方式注册,需要在Java源代码中去注册。

    1、在AndroidManifest文件中注册。

     <receiver android:name=".EditRecevier"> 
                <intent-filter >
                    <action android:name="android.intent.action.EDIT"/>
                </intent-filter>
            </receiver>

    说明:.EditReceiver是实现广播机制的的类,android.intent.action.EDIT是具体要实现的什么广播机制,本例是实现一个编辑的。使用这种方式注册的广播机制是一直存在的,无法取消。

    2、在Java源代码中动态注册广播机制

           //声明Receiver对象
                smsreceiver = new SmsReceiver();
                //声明intent-filter对象
                IntentFilter intentFilter = new IntentFilter();
                //将filter添加到intent-filter对象中
                intentFilter.addAction(SMS_ACTION);
                //使用registerReceiver()注册广播机制
                MainActivity.this.registerReceiver(smsreceiver, intentFilter);

    说明:首先声明实现广播机制的对象(短息)smsreceiver对象,然后声明intent-filter对象,永远指定广播机制的类型(本例是指短信),最后使用registerReceiver方法注册广播机制。使用这种方式注册的广播机制是可以取消的。

    3、取消广播机制

    //直接调用unregisterReceiver()方法注销广播机制
                MainActivity.this.unregisterReceiver(smsreceiver);

    说明:使用当前的Content对象调用unregisterReceiver方法直接取消广播机制

    二、广播接收器的实现

    说明:主要使用了BroadCastReceiver这个类,通过继承这个类,复写这个类的onReceive方法。在onReceive方法中对接收到的广播进行操控。

    package com.example.android_broadcastreceiver2;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.telephony.gsm.SmsMessage;
    
    public class SmsReceiver extends BroadcastReceiver {
    
        public SmsReceiver() {
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            System.out.println("SMSReceiver");
    
             Bundle bundle = intent.getExtras();
             Object[] objects = (Object[]) bundle.get("pdus");
             SmsMessage[] messages = new SmsMessage[objects.length];
             for (int i = 0; i < objects.length; i++) {
             messages[i] = SmsMessage.createFromPdu((byte[]) objects[i]);
             System.out.println(messages[i].getDisplayMessageBody());
             }
        }
    
    }
    三、如何发布广播
        @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    
                    Intent intent = new Intent();
                    intent.setAction(Intent.ACTION_EDIT);
                    MainActivity.this.sendBroadcast(intent);
                }
    
    
    
     
  • 相关阅读:
    SQL Server 中,将多行转换为一行,用某个符号隔开的SQL 语句
    JQ 轻松学会$.get(),$.post(),$ajax()的作用和用法
    Dynamics 365 组织服务查询时,关于输入时间和输出时间的时区问题讲解
    在Dynamics 365的标准窗体,lookup字段变成了[Object Object],picklist直接展示数字
    C# 回顾正则表达式的常用语法
    观洛马琴科对决洛佩兹比赛有感
    读取硬盘序列号
    delphi 数组复制利用CopyMemory 最为完美
    MFC多线程通讯--自定义消息
    MFC 多线程及线程同步
  • 原文地址:https://www.cnblogs.com/yshuaiw/p/3412351.html
Copyright © 2020-2023  润新知