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中什么都看不到。
最佳答案
此Blog post描述了AlarmManager和BroadcastReceiver的一些常见陷阱。包括例子!希望能有所帮助。
编辑:
一些常见的陷阱:
未在AndroidManifest.xml中声明
在 list 文件中声明接收方:
<receiver android:name="net.fusonic.testapp.receivers.TestAlarmReceiver"></receiver>
永远记住,整个Android系统都区分大小写。因此,请在AndroidMainfest.xml中检查您的拼写是否正确。请记住,如果使用“.receivers.TestAlarmReceiver”之类的缩写形式,则Eclipse重构功能不会正确更改软件包名称。
如果您为接收方创建PendingIntent,请添加一个
requestCode
-即使它是一个随机数!没有您的“onReceive”代码,就永远不会被调用! 请注意使用AVD,尤其是在使用“REALTIME_WAKEUP”和SystemClock的情况下。因此,如果尝试测试警报,请重新启动AVD或在真实设备上进行测试!
关于android - 不会调用onReceive方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6040438/