我的注册广播接收器有什么问题?
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) {
...
}
}
}
结果是:
- intentFilter.getAction(0) 的日志给出了正确的操作
- 注册后的意向日志为空
- 我从日志中得到空的收件人列表。
- 并且从未输入过onReceive(从日志中我可以看到
那)
我想我的注册部分有一些错误?
任何 hints/advice 将不胜感激!!
此代码:
Intent intent = context.registerReceiver(receiver, intentFilter);
将 return null
因为它只 return "sticky" 广播。这是正确的,因为您没有发送 "sticky" 广播。
此代码:
List<ResolveInfo> resolveInfos = pm.queryBroadcastReceivers(queryIntent, 0);
应该 return 一个空列表,因为此代码仅 returns BroadcastReceiver
s 已在清单中使用 <receiver>
标记注册,并且不 return 任何动态注册的 BroadcastReceiver
s,你的 MyBroadcastReceiver
就是。
我不知道为什么 onReceive()
没有被调用。请 post 您的 MyBroadcastReceiver
代码。我没有看到任何明显的东西。您可以试试这个 adb 命令:
am broadcast -a DUMMY
您也可以尝试添加
sendBroadcast(queryIntent);
在此代码之后:
Intent queryIntent = new Intent(MY_ACTION);
看看这是否会调用您的 onReceive()
。
我实现了 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) {
...
}
}
}
结果是:
- intentFilter.getAction(0) 的日志给出了正确的操作
- 注册后的意向日志为空
- 我从日志中得到空的收件人列表。
- 并且从未输入过onReceive(从日志中我可以看到 那)
我想我的注册部分有一些错误? 任何 hints/advice 将不胜感激!!
此代码:
Intent intent = context.registerReceiver(receiver, intentFilter);
将 return null
因为它只 return "sticky" 广播。这是正确的,因为您没有发送 "sticky" 广播。
此代码:
List<ResolveInfo> resolveInfos = pm.queryBroadcastReceivers(queryIntent, 0);
应该 return 一个空列表,因为此代码仅 returns BroadcastReceiver
s 已在清单中使用 <receiver>
标记注册,并且不 return 任何动态注册的 BroadcastReceiver
s,你的 MyBroadcastReceiver
就是。
我不知道为什么 onReceive()
没有被调用。请 post 您的 MyBroadcastReceiver
代码。我没有看到任何明显的东西。您可以试试这个 adb 命令:
am broadcast -a DUMMY
您也可以尝试添加
sendBroadcast(queryIntent);
在此代码之后:
Intent queryIntent = new Intent(MY_ACTION);
看看这是否会调用您的 onReceive()
。