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>
    
  • list xml中的
  • 接收方拼写错误

    永远记住,整个Android系统都区分大小写。因此,请在AndroidMainfest.xml中检查您的拼写是否正确。请记住,如果使用“.receivers.TestAlarmReceiver”之类的缩写形式,则Eclipse重构功能不会正确更改软件包名称。
  • PendingIntent requestCode丢失?

    如果您为接收方创建PendingIntent,请添加一个requestCode-即使它是一个随机数!没有您的“onReceive”代码,就永远不会被调用!
  • AVD运行了很长时间(非常棘手)

    请注意使用AVD,尤其是在使用“REALTIME_WAKEUP”和SystemClock的情况下。因此,如果尝试测试警报,请重新启动AVD或在真实设备上进行测试!
  • 关于android - 不会调用onReceive方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6040438/

    10-10 12:49