我已经搜索了又搜索,并且尝试了我能想到的所有方法五次。我无法让我的广播接收器注册。
目前,在 list 中的应用程序元素中,我有:
<receiver android:name=".MainActivity$browserReceiver"
android:enabled="true" >
<intent-filter>
<action android:name="com.mycompany.snapbench.browsertest" />
</intent-filter>
</receiver>
在我的 MainActivity 类中:
public static BrowserReceiver browserReceiver;
MainActivity->onCreate:
browserReceiver = new BrowserReceiver();
最后,在 MainActivity 类的末尾:
public class BrowserReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("Receiver", "I'm pretty sick of this.");
}
}
当我按下应用程序中的按钮时,我会运行此命令作为测试:
if (isIntentAvailable(this, "com.mycompany.snapbench.browsertest")) {
Log.e("Intent", "It is there.");
} else {
Log.e("Intent", "FAIL");
}
当然,我在 LogCat 中总是得到“FAIL”。我做错了什么?
最佳答案
刚刚测试了两种方法,效果都很好。对于这两者,我在名为 ContactManager
的 Activity 中实现了一个类 SmsReceiver
:
public static class SmsReceiver extends BroadcastReceiver {
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(final Context context, final Intent intent) {
if (intent != null && SMS_RECEIVED.equals(intent.getAction())) {
Log.d("TAG", "SMS received in inner class");
}
}
}
首先我在
onCreate()
方法中注册了接收器:IntentFilter filter = new IntentFilter(SmsReceiver.SMS_RECEIVED); BroadcastReceiver receiver = new SmsReceiver(); registerReceiver(receiver, filter);
实际上,最好在
onResume()
中注册它,并在onPause()
中注销它。其次,我删除了注册码并将接收器添加到 list 中:
两种解决方案都运行得很好,并打印了在内部类中收到的短信。据我所知,您没有声明您的内部类static
。这可能就是错误所在。所以只需将其更改为:
public static class BrowserReceiver extends BroadcastReceiver {
...
}
希望这有帮助......干杯!
关于android - 未注册内部类的广播接收器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16223317/