public class BroadcastTest extends Activity {
BroadcastReceiver receiver;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try{
receiver=new Receiver(this);
registerReceiver(receiver,new IntentFilter(Intent.ACTION_CALL_BUTTON));
}catch(Exception e){
Log.d("error",e.getMessage());
}
}
}
和另一个班级
public class Receiver extends BroadcastReceiver{
public Receiver(BroadcastTest broadcastTest) {
// TODO Auto-generated constructor stub
}
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
Log.d("Fired","Hi");
}
}
当我按下呼叫按钮时,接收器类的 onReceive 方法应该被调用吗?如果是,那么它不会被呼叫。我在这里做错了什么。按下呼叫按钮时,我在 logcat 中没有看到任何内容。提前致谢
This 博客文章 http://www.fusonic.net/en/blog/2011/07/05/why-my-broadcastreceiver-does-not-get-called/描述了 AlarmManager 和 BroadcastReceiver 的一些常见缺陷。包括示例!希望有帮助。
编辑:
一些常见的陷阱:
-
接收器未在 AndroidManifest.xml 中声明
在清单文件中声明接收者:
<receiver android:name="net.fusonic.testapp.receivers.TestAlarmReceiver"></receiver>
-
Manifest xml 中的接收者拼写错误
永远记住整个 Android 系统是区分大小写的。因此,请检查 AndroidMainfest.xml 中的拼写是否正确。请记住,如果您使用“.receivers.TestAlarmReceiver”等缩写形式,Eclipse 重构函数不会正确更改包名称。
-
PendingIntent requestCode 丢失?
如果您为 Receiver 创建 PendingIntent,请添加requestCode
– 即使它是一个随机数!没有你的“onReceive”代码永远不会被调用!
-
AVD长时间运行(非常棘手)
请注意使用 AVD,尤其是在使用“REALTIME_WAKEUP”和 SystemClock 时……因此,如果您尝试测试闹钟,请重新启动 AVD 或在真实设备上进行测试!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)