android 广播的方法

本文详细介绍了Android中的广播机制,包括如何定义广播Action、Extra及如何发送和接收广播。提供了发送广播的具体实现示例代码,并展示了两种接收广播的方法:通过Context注册接收器以及在AndroidManifest.xml中声明接收器。

依赖包类:

import android.content.Context;
import android.content.BroadcastReceiver;
import android.os.Bundle;
import android.content.Intent;
import android.app.Activity;

发送广播,实现实例如下:

{

  public static final String DVB_CHANNEL_SEARCH_BROADCAST_ACTION=
                                                                                 "android.com.dvbbase.action.DVB_CHANNEL_SEARCH_BROADCAST_ACTION";

  public static final String DVB_CHANNEL_SEARCH_BROADCAST_EXTR_CMD =
                                                                                "dvb search Broadcast Commod";
  public static final String DVB_CHANNEL_SEARCH_BROADCAST_EXTR_PARAM =
                                                                                "dvb search Broadcast Parameter";

  public static final String DVB_CHANNEL_SEARCH_DB_CLEARN = "clearn";

  public static final String DVB_CHANNEL_SEARCH_BROADCAST_MSG_START = "search start";
  public static final String DVB_CHANNEL_SEARCH_BROADCAST_MSG_FINISH = "search finish";


private
void SendBroadcastMassage(int cmd)
{

    String broadcast_cmd = "";
    String broadcast_param = "";

    Intent intent = new Intent();
    intent.setAction(DVB_CHANNEL_SEARCH_BROADCAST_ACTION);
    switch (cmd) {
    case BROADCAST_MSG_SEARCH_START:
    broadcast_cmd = DVB_CHANNEL_SEARCH_BROADCAST_MSG_START;
    broadcast_param = mTvInputId;
    break;
    case BROADCAST_MSG_SEARCH_FINISH:
    {
      int chNum= 0;
      broadcast_cmd = DVB_CHANNEL_SEARCH_BROADCAST_MSG_FINISH;
      if (mdbImpleHandle != null) {
         chNum =  mdbImpleHandle.getChannelNumFormDB();
      }
      if((nitScan == 1) && (chNum > 0))
      {
        broadcast_param = DVB_CHANNEL_SEARCH_DB_CLEARN;
      }
      else
      {
        broadcast_param = "";
      }
    }
    break;
    default:
    broadcast_cmd = "";
   broadcast_param = "";
    break;
    }
    intent.putExtra(DVB_CHANNEL_SEARCH_BROADCAST_EXTR_CMD, broadcast_cmd);
    intent.putExtra(DVB_CHANNEL_SEARCH_BROADCAST_EXTR_PARAM, broadcast_param);
    Log.i(TAG, "ChannelScanImpl send broadcast:" + broadcast_cmd + "\n");
    this.sendBroadcast(intent);
}

}

接收广播的方法:

{

  private
    BroadcastReceiver mBroadcastReceiver = null;

mBroadcastReceiver = new EpgDbImplIntentReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(DvbBase.DVB_CHANNEL_SEARCH_BROADCAST_ACTION);
mcontext.registerReceiver(mBroadcastReceiver, intentFilter);


private
class ChannelDbImplIntentReceiver extends BroadcastReceiver
{
    @Override public void onReceive(Context context, Intent intent)
    {
    Message newmsg = null;
    String msgParam;
    String action = intent.getAction();
    Log.i(TAG, "ChannelDbImpl Intent Receiver action = " + action);
    if (action.equals(DVB_CHANNEL_SEARCH_BROADCAST_ACTION)) {
        String msg = intent.getStringExtra(DVB_CHANNEL_SEARCH_BROADCAST_EXTR_CMD);
        if (Objects.equals(msg, DVB_CHANNEL_SEARCH_BROADCAST_MSG_START)) {
        msgParam = intent.getStringExtra(DVB_CHANNEL_SEARCH_BROADCAST_EXTR_PARAM);
        Log.i(TAG, "@@@#### TvInput boroadcase receiver dvb search start;tvinput id:" + msgParam + " \n");
        } else if (Objects.equals(msg, DVB_CHANNEL_SEARCH_BROADCAST_MSG_FINISH)) {
       msgParam = intent.getStringExtra(DVB_CHANNEL_SEARCH_BROADCAST_EXTR_PARAM);
        Log.i(TAG, "@@@#### TvInput boroadcase receiver dvb search stop;db clearn:" + msgParam + " \n");
        }
    }
    }
}

}


另外一种接收方法:在AndroidManifest.xml中声明,而不需要在context中registerReceiver,声明如下:

<receiver android:name="ChannelDbImplIntentReceiver">
            <intent-filter>
                <action android:name="android.com.dvbbase.action.DVB_CHANNEL_SEARCH_BROADCAST_ACTION" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MEDIA_MOUNTED" />
                <data android:scheme="file" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MEDIA_UNMOUNTED" />
                <data android:scheme="file" />
            </intent-filter>
    </receiver>

结束:

{

   mcontext.unregisterReceiver(mBroadcastReceiver);

}


备注:因为广播方式传递消息和参数,延时太长,不宜用于快速反应的应用!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值