依赖包类:
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);
}
备注:因为广播方式传递消息和参数,延时太长,不宜用于快速反应的应用!