我的注册广播接收器有什么问题?

What's wrong with my register broadcast receiver?

我实现了 MyBroadcastReceiver class,我尝试在运行时注册一个广播接收器:

String MY_ACTION = "DUMMY";
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter(MY_ACTION);
Log.i(TAG, "intentFilter: " + intentFilter.getAction(0));
Intent intent = context.registerReceiver(receiver, intentFilter);
Log.i(TAG, "intent returned after registering:" + intent);
Intent queryIntent = new Intent(MY_ACTION);
PackageManager pm = context.getPackageManager();
List<ResolveInfo> resolveInfos = pm.queryBroadcastReceivers(queryIntent, 0);
Log.i(TAG, "list of receivers:" + resolveInfos.toString());

我运行一个来自adb的广播shell:

am broadcast \
-n com.foo.foo.foo/.MyBroadcastReceiver \
-a DUMMY

我的 onReceive() 中也有一些 Log.i(在 MyBroadcast Receiver 中实现)。

public class MyBroadcastReceiver extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
   Log.i(TAG, "in Broadcasting Receiver anyway");
   if (intent != null) {
     ...
   }
 }

}

结果是:

我想我的注册部分有一些错误? 任何 hints/advice 将不胜感激!!

此代码:

Intent intent = context.registerReceiver(receiver, intentFilter);

将 return null 因为它只 return "sticky" 广播。这是正确的,因为您没有发送 "sticky" 广播。

此代码:

List<ResolveInfo> resolveInfos = pm.queryBroadcastReceivers(queryIntent, 0);

应该 return 一个空列表,因为此代码仅 returns BroadcastReceivers 已在清单中使用 <receiver> 标记注册,并且不 return 任何动态注册的 BroadcastReceivers,你的 MyBroadcastReceiver 就是。

我不知道为什么 onReceive() 没有被调用。请 post 您的 MyBroadcastReceiver 代码。我没有看到任何明显的东西。您可以试试这个 adb 命令:

am broadcast -a DUMMY

您也可以尝试添加

sendBroadcast(queryIntent);

在此代码之后:

Intent queryIntent = new Intent(MY_ACTION);

看看这是否会调用您的 onReceive()